esquema de un documento xml los esquemas de bds restringen que información puede ser almacenada los...

89
Esquema de un documento XML Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado No obstante, los esquemas son muy importantes para el intercambio de datos XML De otro modo, un sitio no puede interpretar automaticamente los datos recibidos de otro sitio Dos mecanismos se usan en XML para especificar esquemas Document Type Definition (DTD) Un DTD Impone estructura a un documento XML. XML Schema Más reciente, su uso está en pleno crecimiento

Upload: cristian-godino

Post on 20-Feb-2015

17 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Esquema de un documento XMLEsquema de un documento XML

Los esquemas de BDs restringen que informacioacuten puede ser almacenada

Los documentos XML no requieren tener un esquema asociado

No obstante los esquemas son muy importantes para el intercambio de datos XML

De otro modo un sitio no puede interpretar automaticamente los datos recibidos de otro sitio

Dos mecanismos se usan en XML para especificar esquemas

Document Type Definition (DTD)

Un DTD Impone estructura a un documento XML

XML Schema

Maacutes reciente su uso estaacute en pleno crecimiento

Definicioacuten de Tipo de Documento (DTD)Definicioacuten de Tipo de Documento (DTD)

El tipo de un documento XML puede ser especificado usando un DTD

DTD condiciona o restringe la estructura de los datos XML

Que elementos pueden ocurrir

Que atributos puededebe tener un elemento

Que subelementos puedendeben ocurrir dentro de cada elemento y cuantas veces

DTD no restringe los tipos de datos

Todos los valores se representan como strings en XML

Sintaxis DTD (luego en detalle)

ltELEMENT elemento (especificacioacuten de subelementos) gt ltATTLIST NombreElemento NombreAtributo attType Const gt

Especificacioacuten de Especificacioacuten de ElementosElementos en DTD en DTD La especificacioacuten de un elemento puede contener

Nombres de sub-elementos PCDATA (Parsed Character Data) ie strings de caracteres EMPTY (el elemento no tiene contenido o subelementos) ANY (el contenido puede ser cq Mezcla de PCDATA y elementos) Expresiones regulares

Ejemplolt ELEMENT depositante (nombre clientenuacutemero cuenta)gt

lt ELEMENT nombre cliente (PCDATA)gtlt ELEMENT nuacutemero cuenta (PCDATA)gt

Ejemplo del uso de expresiones regulares

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

A continuacioacuten veremos esto maacutes formalmente

Definicion del tipo de un elementoDefinicion del tipo de un elemento

Un elemento E se declara como

ltELEMENT E Pgt Donde P es una expresioacuten regular ie

P = EMPTY | ANY | PCDATA | Ersquo | P1 P2 | P1 | P2 | P | P+ | P

Ersquo tipo elemento P1 P2 concatenacioacuten P1 | P2 disjuncioacuten P opcional P+ una o maacutes ocurrencias P cero o maacutes ocurrencias (clausura de Kleene)

Nota Clausura de Kleene a b c = ε a b c aa ab ac ba bb bc

1048698Notacioacuten DTDhellip

ldquo|rdquo - alternativas ( e1 | e2 ) especifica que puede aparecer en el documento e1 o e2 (disjuncioacuten)

ldquo+rdquo - 1 o maacutes ocurrencias Un ldquo+rdquo siguiendo al nombre de un elemento significa que el elemento puede aparecer una o maacutes veces en el documento (elemento multivaluado)

ldquordquo - cero o maacutes ocurrencias Un ldquordquo siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o maacutes veces en el documento (elemento opcionalmente multivaluado)

ldquordquo ndash cero o una ocurrencia Un ldquordquo siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o una vez en el documento (optional single-valued element)

Todo elemento que aparezca sin ninguno de estos 3 siacutembolos debe aparecer soacutelo una vez en el documento (single-valued element) El tipo de un elemento es especificado entre pareacutentesis siguiendo al elemento Si el pareacutentesis incluye nombres de otros elementos estos seraacuten hijos en la estructura de aacuterbol Si los pareacutentesis incluyen la palabra clave PCDATA el elemento es un nodo hoja Los pareacutentesis pueden anidarse al especificar elementos

Expresiones Regulares ejemplosExpresiones Regulares ejemplos

nombre dir email

nombre

dir

email

Un ciacuterculo doble denota un estado admisible

Otro ejemploOtro ejemplo

nombredir(tel | fax)email

nombre

dir

tel

tel

fax

fax

email

email

email

Algunas cosas son difiacuteciles de especificarAlgunas cosas son difiacuteciles de especificar

Cada empleado debe contener elementos nombre edad y dni en algun orden

ltELEMENT empleado

( (nombre edad dni) | (edad dni nombre) | (dni nombre edad) |

)gt

Suponga que hay muchos maacutes elementos involucrados

Existen n ordenamientos diferentes para n elementos

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt

Ejemplo Banco DTD Ejemplo Banco DTD

ltDOCTYPE banco [

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

ltELEMENT cuenta (numero_cuenta nombre_sucursal balance)gt

lt ELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt

lt ELEMENT depositante (nombre_cliente nuacutemero_cuenta)gt

lt ELEMENT nuacutemero_cuenta (PCDATA)gt

lt ELEMENT nombre_sucursal (PCDATA)gt

lt ELEMENT balance(PCDATA)gt

lt ELEMENT nombre_cliente(PCDATA)gt

lt ELEMENT calle_cliente(PCDATA)gt

lt ELEMENT ciudad_cliente(PCDATA)gt

]gt volver

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 2: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Definicioacuten de Tipo de Documento (DTD)Definicioacuten de Tipo de Documento (DTD)

El tipo de un documento XML puede ser especificado usando un DTD

DTD condiciona o restringe la estructura de los datos XML

Que elementos pueden ocurrir

Que atributos puededebe tener un elemento

Que subelementos puedendeben ocurrir dentro de cada elemento y cuantas veces

DTD no restringe los tipos de datos

Todos los valores se representan como strings en XML

Sintaxis DTD (luego en detalle)

ltELEMENT elemento (especificacioacuten de subelementos) gt ltATTLIST NombreElemento NombreAtributo attType Const gt

Especificacioacuten de Especificacioacuten de ElementosElementos en DTD en DTD La especificacioacuten de un elemento puede contener

Nombres de sub-elementos PCDATA (Parsed Character Data) ie strings de caracteres EMPTY (el elemento no tiene contenido o subelementos) ANY (el contenido puede ser cq Mezcla de PCDATA y elementos) Expresiones regulares

Ejemplolt ELEMENT depositante (nombre clientenuacutemero cuenta)gt

lt ELEMENT nombre cliente (PCDATA)gtlt ELEMENT nuacutemero cuenta (PCDATA)gt

Ejemplo del uso de expresiones regulares

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

A continuacioacuten veremos esto maacutes formalmente

Definicion del tipo de un elementoDefinicion del tipo de un elemento

Un elemento E se declara como

ltELEMENT E Pgt Donde P es una expresioacuten regular ie

P = EMPTY | ANY | PCDATA | Ersquo | P1 P2 | P1 | P2 | P | P+ | P

Ersquo tipo elemento P1 P2 concatenacioacuten P1 | P2 disjuncioacuten P opcional P+ una o maacutes ocurrencias P cero o maacutes ocurrencias (clausura de Kleene)

Nota Clausura de Kleene a b c = ε a b c aa ab ac ba bb bc

1048698Notacioacuten DTDhellip

ldquo|rdquo - alternativas ( e1 | e2 ) especifica que puede aparecer en el documento e1 o e2 (disjuncioacuten)

ldquo+rdquo - 1 o maacutes ocurrencias Un ldquo+rdquo siguiendo al nombre de un elemento significa que el elemento puede aparecer una o maacutes veces en el documento (elemento multivaluado)

ldquordquo - cero o maacutes ocurrencias Un ldquordquo siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o maacutes veces en el documento (elemento opcionalmente multivaluado)

ldquordquo ndash cero o una ocurrencia Un ldquordquo siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o una vez en el documento (optional single-valued element)

Todo elemento que aparezca sin ninguno de estos 3 siacutembolos debe aparecer soacutelo una vez en el documento (single-valued element) El tipo de un elemento es especificado entre pareacutentesis siguiendo al elemento Si el pareacutentesis incluye nombres de otros elementos estos seraacuten hijos en la estructura de aacuterbol Si los pareacutentesis incluyen la palabra clave PCDATA el elemento es un nodo hoja Los pareacutentesis pueden anidarse al especificar elementos

Expresiones Regulares ejemplosExpresiones Regulares ejemplos

nombre dir email

nombre

dir

email

Un ciacuterculo doble denota un estado admisible

Otro ejemploOtro ejemplo

nombredir(tel | fax)email

nombre

dir

tel

tel

fax

fax

email

email

email

Algunas cosas son difiacuteciles de especificarAlgunas cosas son difiacuteciles de especificar

Cada empleado debe contener elementos nombre edad y dni en algun orden

ltELEMENT empleado

( (nombre edad dni) | (edad dni nombre) | (dni nombre edad) |

)gt

Suponga que hay muchos maacutes elementos involucrados

Existen n ordenamientos diferentes para n elementos

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt

Ejemplo Banco DTD Ejemplo Banco DTD

ltDOCTYPE banco [

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

ltELEMENT cuenta (numero_cuenta nombre_sucursal balance)gt

lt ELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt

lt ELEMENT depositante (nombre_cliente nuacutemero_cuenta)gt

lt ELEMENT nuacutemero_cuenta (PCDATA)gt

lt ELEMENT nombre_sucursal (PCDATA)gt

lt ELEMENT balance(PCDATA)gt

lt ELEMENT nombre_cliente(PCDATA)gt

lt ELEMENT calle_cliente(PCDATA)gt

lt ELEMENT ciudad_cliente(PCDATA)gt

]gt volver

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 3: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Especificacioacuten de Especificacioacuten de ElementosElementos en DTD en DTD La especificacioacuten de un elemento puede contener

Nombres de sub-elementos PCDATA (Parsed Character Data) ie strings de caracteres EMPTY (el elemento no tiene contenido o subelementos) ANY (el contenido puede ser cq Mezcla de PCDATA y elementos) Expresiones regulares

Ejemplolt ELEMENT depositante (nombre clientenuacutemero cuenta)gt

lt ELEMENT nombre cliente (PCDATA)gtlt ELEMENT nuacutemero cuenta (PCDATA)gt

Ejemplo del uso de expresiones regulares

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

A continuacioacuten veremos esto maacutes formalmente

Definicion del tipo de un elementoDefinicion del tipo de un elemento

Un elemento E se declara como

ltELEMENT E Pgt Donde P es una expresioacuten regular ie

P = EMPTY | ANY | PCDATA | Ersquo | P1 P2 | P1 | P2 | P | P+ | P

Ersquo tipo elemento P1 P2 concatenacioacuten P1 | P2 disjuncioacuten P opcional P+ una o maacutes ocurrencias P cero o maacutes ocurrencias (clausura de Kleene)

Nota Clausura de Kleene a b c = ε a b c aa ab ac ba bb bc

1048698Notacioacuten DTDhellip

ldquo|rdquo - alternativas ( e1 | e2 ) especifica que puede aparecer en el documento e1 o e2 (disjuncioacuten)

ldquo+rdquo - 1 o maacutes ocurrencias Un ldquo+rdquo siguiendo al nombre de un elemento significa que el elemento puede aparecer una o maacutes veces en el documento (elemento multivaluado)

ldquordquo - cero o maacutes ocurrencias Un ldquordquo siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o maacutes veces en el documento (elemento opcionalmente multivaluado)

ldquordquo ndash cero o una ocurrencia Un ldquordquo siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o una vez en el documento (optional single-valued element)

Todo elemento que aparezca sin ninguno de estos 3 siacutembolos debe aparecer soacutelo una vez en el documento (single-valued element) El tipo de un elemento es especificado entre pareacutentesis siguiendo al elemento Si el pareacutentesis incluye nombres de otros elementos estos seraacuten hijos en la estructura de aacuterbol Si los pareacutentesis incluyen la palabra clave PCDATA el elemento es un nodo hoja Los pareacutentesis pueden anidarse al especificar elementos

Expresiones Regulares ejemplosExpresiones Regulares ejemplos

nombre dir email

nombre

dir

email

Un ciacuterculo doble denota un estado admisible

Otro ejemploOtro ejemplo

nombredir(tel | fax)email

nombre

dir

tel

tel

fax

fax

email

email

email

Algunas cosas son difiacuteciles de especificarAlgunas cosas son difiacuteciles de especificar

Cada empleado debe contener elementos nombre edad y dni en algun orden

ltELEMENT empleado

( (nombre edad dni) | (edad dni nombre) | (dni nombre edad) |

)gt

Suponga que hay muchos maacutes elementos involucrados

Existen n ordenamientos diferentes para n elementos

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt

Ejemplo Banco DTD Ejemplo Banco DTD

ltDOCTYPE banco [

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

ltELEMENT cuenta (numero_cuenta nombre_sucursal balance)gt

lt ELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt

lt ELEMENT depositante (nombre_cliente nuacutemero_cuenta)gt

lt ELEMENT nuacutemero_cuenta (PCDATA)gt

lt ELEMENT nombre_sucursal (PCDATA)gt

lt ELEMENT balance(PCDATA)gt

lt ELEMENT nombre_cliente(PCDATA)gt

lt ELEMENT calle_cliente(PCDATA)gt

lt ELEMENT ciudad_cliente(PCDATA)gt

]gt volver

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 4: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Definicion del tipo de un elementoDefinicion del tipo de un elemento

Un elemento E se declara como

ltELEMENT E Pgt Donde P es una expresioacuten regular ie

P = EMPTY | ANY | PCDATA | Ersquo | P1 P2 | P1 | P2 | P | P+ | P

Ersquo tipo elemento P1 P2 concatenacioacuten P1 | P2 disjuncioacuten P opcional P+ una o maacutes ocurrencias P cero o maacutes ocurrencias (clausura de Kleene)

Nota Clausura de Kleene a b c = ε a b c aa ab ac ba bb bc

1048698Notacioacuten DTDhellip

ldquo|rdquo - alternativas ( e1 | e2 ) especifica que puede aparecer en el documento e1 o e2 (disjuncioacuten)

ldquo+rdquo - 1 o maacutes ocurrencias Un ldquo+rdquo siguiendo al nombre de un elemento significa que el elemento puede aparecer una o maacutes veces en el documento (elemento multivaluado)

ldquordquo - cero o maacutes ocurrencias Un ldquordquo siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o maacutes veces en el documento (elemento opcionalmente multivaluado)

ldquordquo ndash cero o una ocurrencia Un ldquordquo siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o una vez en el documento (optional single-valued element)

Todo elemento que aparezca sin ninguno de estos 3 siacutembolos debe aparecer soacutelo una vez en el documento (single-valued element) El tipo de un elemento es especificado entre pareacutentesis siguiendo al elemento Si el pareacutentesis incluye nombres de otros elementos estos seraacuten hijos en la estructura de aacuterbol Si los pareacutentesis incluyen la palabra clave PCDATA el elemento es un nodo hoja Los pareacutentesis pueden anidarse al especificar elementos

Expresiones Regulares ejemplosExpresiones Regulares ejemplos

nombre dir email

nombre

dir

email

Un ciacuterculo doble denota un estado admisible

Otro ejemploOtro ejemplo

nombredir(tel | fax)email

nombre

dir

tel

tel

fax

fax

email

email

email

Algunas cosas son difiacuteciles de especificarAlgunas cosas son difiacuteciles de especificar

Cada empleado debe contener elementos nombre edad y dni en algun orden

ltELEMENT empleado

( (nombre edad dni) | (edad dni nombre) | (dni nombre edad) |

)gt

Suponga que hay muchos maacutes elementos involucrados

Existen n ordenamientos diferentes para n elementos

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt

Ejemplo Banco DTD Ejemplo Banco DTD

ltDOCTYPE banco [

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

ltELEMENT cuenta (numero_cuenta nombre_sucursal balance)gt

lt ELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt

lt ELEMENT depositante (nombre_cliente nuacutemero_cuenta)gt

lt ELEMENT nuacutemero_cuenta (PCDATA)gt

lt ELEMENT nombre_sucursal (PCDATA)gt

lt ELEMENT balance(PCDATA)gt

lt ELEMENT nombre_cliente(PCDATA)gt

lt ELEMENT calle_cliente(PCDATA)gt

lt ELEMENT ciudad_cliente(PCDATA)gt

]gt volver

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 5: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

1048698Notacioacuten DTDhellip

ldquo|rdquo - alternativas ( e1 | e2 ) especifica que puede aparecer en el documento e1 o e2 (disjuncioacuten)

ldquo+rdquo - 1 o maacutes ocurrencias Un ldquo+rdquo siguiendo al nombre de un elemento significa que el elemento puede aparecer una o maacutes veces en el documento (elemento multivaluado)

ldquordquo - cero o maacutes ocurrencias Un ldquordquo siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o maacutes veces en el documento (elemento opcionalmente multivaluado)

ldquordquo ndash cero o una ocurrencia Un ldquordquo siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o una vez en el documento (optional single-valued element)

Todo elemento que aparezca sin ninguno de estos 3 siacutembolos debe aparecer soacutelo una vez en el documento (single-valued element) El tipo de un elemento es especificado entre pareacutentesis siguiendo al elemento Si el pareacutentesis incluye nombres de otros elementos estos seraacuten hijos en la estructura de aacuterbol Si los pareacutentesis incluyen la palabra clave PCDATA el elemento es un nodo hoja Los pareacutentesis pueden anidarse al especificar elementos

Expresiones Regulares ejemplosExpresiones Regulares ejemplos

nombre dir email

nombre

dir

email

Un ciacuterculo doble denota un estado admisible

Otro ejemploOtro ejemplo

nombredir(tel | fax)email

nombre

dir

tel

tel

fax

fax

email

email

email

Algunas cosas son difiacuteciles de especificarAlgunas cosas son difiacuteciles de especificar

Cada empleado debe contener elementos nombre edad y dni en algun orden

ltELEMENT empleado

( (nombre edad dni) | (edad dni nombre) | (dni nombre edad) |

)gt

Suponga que hay muchos maacutes elementos involucrados

Existen n ordenamientos diferentes para n elementos

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt

Ejemplo Banco DTD Ejemplo Banco DTD

ltDOCTYPE banco [

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

ltELEMENT cuenta (numero_cuenta nombre_sucursal balance)gt

lt ELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt

lt ELEMENT depositante (nombre_cliente nuacutemero_cuenta)gt

lt ELEMENT nuacutemero_cuenta (PCDATA)gt

lt ELEMENT nombre_sucursal (PCDATA)gt

lt ELEMENT balance(PCDATA)gt

lt ELEMENT nombre_cliente(PCDATA)gt

lt ELEMENT calle_cliente(PCDATA)gt

lt ELEMENT ciudad_cliente(PCDATA)gt

]gt volver

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 6: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Expresiones Regulares ejemplosExpresiones Regulares ejemplos

nombre dir email

nombre

dir

email

Un ciacuterculo doble denota un estado admisible

Otro ejemploOtro ejemplo

nombredir(tel | fax)email

nombre

dir

tel

tel

fax

fax

email

email

email

Algunas cosas son difiacuteciles de especificarAlgunas cosas son difiacuteciles de especificar

Cada empleado debe contener elementos nombre edad y dni en algun orden

ltELEMENT empleado

( (nombre edad dni) | (edad dni nombre) | (dni nombre edad) |

)gt

Suponga que hay muchos maacutes elementos involucrados

Existen n ordenamientos diferentes para n elementos

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt

Ejemplo Banco DTD Ejemplo Banco DTD

ltDOCTYPE banco [

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

ltELEMENT cuenta (numero_cuenta nombre_sucursal balance)gt

lt ELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt

lt ELEMENT depositante (nombre_cliente nuacutemero_cuenta)gt

lt ELEMENT nuacutemero_cuenta (PCDATA)gt

lt ELEMENT nombre_sucursal (PCDATA)gt

lt ELEMENT balance(PCDATA)gt

lt ELEMENT nombre_cliente(PCDATA)gt

lt ELEMENT calle_cliente(PCDATA)gt

lt ELEMENT ciudad_cliente(PCDATA)gt

]gt volver

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 7: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Otro ejemploOtro ejemplo

nombredir(tel | fax)email

nombre

dir

tel

tel

fax

fax

email

email

email

Algunas cosas son difiacuteciles de especificarAlgunas cosas son difiacuteciles de especificar

Cada empleado debe contener elementos nombre edad y dni en algun orden

ltELEMENT empleado

( (nombre edad dni) | (edad dni nombre) | (dni nombre edad) |

)gt

Suponga que hay muchos maacutes elementos involucrados

Existen n ordenamientos diferentes para n elementos

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt

Ejemplo Banco DTD Ejemplo Banco DTD

ltDOCTYPE banco [

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

ltELEMENT cuenta (numero_cuenta nombre_sucursal balance)gt

lt ELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt

lt ELEMENT depositante (nombre_cliente nuacutemero_cuenta)gt

lt ELEMENT nuacutemero_cuenta (PCDATA)gt

lt ELEMENT nombre_sucursal (PCDATA)gt

lt ELEMENT balance(PCDATA)gt

lt ELEMENT nombre_cliente(PCDATA)gt

lt ELEMENT calle_cliente(PCDATA)gt

lt ELEMENT ciudad_cliente(PCDATA)gt

]gt volver

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 8: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Algunas cosas son difiacuteciles de especificarAlgunas cosas son difiacuteciles de especificar

Cada empleado debe contener elementos nombre edad y dni en algun orden

ltELEMENT empleado

( (nombre edad dni) | (edad dni nombre) | (dni nombre edad) |

)gt

Suponga que hay muchos maacutes elementos involucrados

Existen n ordenamientos diferentes para n elementos

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt

Ejemplo Banco DTD Ejemplo Banco DTD

ltDOCTYPE banco [

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

ltELEMENT cuenta (numero_cuenta nombre_sucursal balance)gt

lt ELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt

lt ELEMENT depositante (nombre_cliente nuacutemero_cuenta)gt

lt ELEMENT nuacutemero_cuenta (PCDATA)gt

lt ELEMENT nombre_sucursal (PCDATA)gt

lt ELEMENT balance(PCDATA)gt

lt ELEMENT nombre_cliente(PCDATA)gt

lt ELEMENT calle_cliente(PCDATA)gt

lt ELEMENT ciudad_cliente(PCDATA)gt

]gt volver

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 9: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt

Ejemplo Banco DTD Ejemplo Banco DTD

ltDOCTYPE banco [

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

ltELEMENT cuenta (numero_cuenta nombre_sucursal balance)gt

lt ELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt

lt ELEMENT depositante (nombre_cliente nuacutemero_cuenta)gt

lt ELEMENT nuacutemero_cuenta (PCDATA)gt

lt ELEMENT nombre_sucursal (PCDATA)gt

lt ELEMENT balance(PCDATA)gt

lt ELEMENT nombre_cliente(PCDATA)gt

lt ELEMENT calle_cliente(PCDATA)gt

lt ELEMENT ciudad_cliente(PCDATA)gt

]gt volver

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 10: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Ejemplo Banco DTD Ejemplo Banco DTD

ltDOCTYPE banco [

ltELEMENT banco (( cuenta | cliente | depositante)+)gt

ltELEMENT cuenta (numero_cuenta nombre_sucursal balance)gt

lt ELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt

lt ELEMENT depositante (nombre_cliente nuacutemero_cuenta)gt

lt ELEMENT nuacutemero_cuenta (PCDATA)gt

lt ELEMENT nombre_sucursal (PCDATA)gt

lt ELEMENT balance(PCDATA)gt

lt ELEMENT nombre_cliente(PCDATA)gt

lt ELEMENT calle_cliente(PCDATA)gt

lt ELEMENT ciudad_cliente(PCDATA)gt

]gt volver

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 11: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Ejemplo libreta de Direcciones datos XML Ejemplo libreta de Direcciones datos XML

ltpersonagt

ltnombregt Juan Perez ltnombregt

ltpresentacioacutengt Ing J Perez ltpresentacioacutengt

ltdireccioacutengtcalle Las Flores 1234 ltdireccioacutengt

ltdireccioacutengt calle Las Rosas 567 ltdireccioacutengt

lttelgt (321) 786 2543 lttelgt

ltfaxgt (321) 786 2544 ltfaxgt

lttelgt (321) 786 2544 lttelgt

ltemailgt jptutopiacom ltemailgt

ltpersonagt

Teleacutefonos y faxes mezclados

Tantas como se necesiten

Tantas liacuteneas de direccioacuten como sean necesarias

A lo sumo una presentacioacuten

Exactamente un nombre

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 12: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

El resto del documento XML para libreta de El resto del documento XML para libreta de direcciones esdirecciones es

ltlibreta-direccionesgt ltpersonagt ltnombregt Juan Perez ltnombregt ltpresentacioacutengt Ing J Perez ltpresentacioacutengt hellip

ltemailgt jptutopiacom ltemailgt ltpersonagt ltpersonagt ltpersonagtlt libreta-direcciones gt

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 13: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Ej Libreta direcciones especificando la estructura c DTDEj Libreta direcciones especificando la estructura c DTD

nombre para especificar 1 elemento nombre

presentacioacuten para especificar un elemento presentacioacuten opcional (0o1)

Nombre presentacioacuten para especificar 1 nombre seguido de una

presentacioacuten opcional

direccioacuten para especificar 0 o maacutes lineas de direccioacuten

tel | fax un elemento tel o un elemento fax

(tel | fax) 0 o maacutes repeticiones de tel o fax ont n o m xtoc e id i

email 0 or maacutes elementos email

De modo que la estructura completa para persona estaacute dada por la expresioacuten regular

nombre presentacioacuten direccioacuten (tel | fax) email

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 14: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Documento XML conDocumento XML con DTD internoDTD interno para libreta de direccionespara libreta de direcciones

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE libreta-direcciones [

ltELEMENT libreta-direcciones (persona)gt

ltELEMENT persona (nombre presentacioacuten direccioacuten (fax | tel) email)gt

ltELEMENT nombre (PCDATA)gt

ltELEMENT presentacioacuten (PCDATA)gt

ltELEMENT direccioacuten (PCDATA)gt

ltELEMENT tel (PCDATA)gt

ltELEMENT fax (PCDATA)gt

ltELEMENT email (PCDATA)gt

]gt

ldquoInternordquo significa que el DTD y el documento XML estaacuten en el mismo archivo

La sintaxis de un DTD no es sintaxis XML

Ampliaremos a continuacioacutenhellip

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 15: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Asociando un DTD con un documentoAsociando un DTD con un documento

Un DTD puede ser interno El DTD es parte del archivo del documento

o externo El DTD y el documento estaacuten en archivos separados un DTD

externo puede residir En el sistema de archivos local

(en el que estaacute el documento) En un sistema de archivos remoto

Etiqueta de encabezamientoEtiqueta de encabezamiento

ltxml version=10 standalone=yesno encoding=UTF-8gt Standalone=ldquoyesrdquo significa que se trata de un DTD externo Si se omite el atributo de codificacioacuten el procesador usaraacute UTF-8

(default)

Nota UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacioacuten de caracteres

Unicode de longitud variable

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 16: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Con DTD interno

ltxml version=10gt

ltDOCTYPE libreta-direcciones [ltELEMENT gt hellip ]gt

lt libreta-direccionesgt lt libreta-direccionesgt

Con DTD en el sistema de archivos local

ltDOCTYPE libreta-direcciones SYSTEM schemadtdgt

Con DTD en un sistema de archivos remoto

ltDOCTYPE db SYSTEM httpwwwschemaauthoritycomschemadtdgt

Asociando un DTD con un documentoAsociando un DTD con un documento

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 17: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Especificacioacuten de Especificacioacuten de AtributosAtributos en DTD en DTD Especificacioacuten de Atributos para catributo de un elemento especificar

Nombre Tipo de atributo

CDATA ID (identificador) o IDREF (ID reference) o IDREFS (muacuteltiples IDREFs)

ndash luego ampliaremos Alguna de las siguientes claacuteusulas

REQUIRED significa que el atributo debe ser incluido en el elemento IMPLIED significa que el atributo es opcional en el elemento FIXED ldquovalorrdquo el valor entre comillas es el uacutenico posible para el atributo ldquovalorrdquo Valor por defecto que toma el atributo si no se daacute ninguno

Ejemplos ltATTLIST cuenta tipodecuenta CDATA ldquocheckingrdquogt ltATTLIST cliente id_cliente ID REQUIRED cuentas IDREFSREQUIREDgt

elemento valor x defecto tipo atributo

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 18: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

IDs e IDREFsIDs e IDREFs

Un elemento puede tener a lo sumo un atributo de tipo ID

El valor del atributo ID debe ser distinto para cada elemento del documento XML (valor uacutenico en todo el documento)

Asiacute el valor de un ID es un identificador de objeto

Un atributo de tipo IDREF debe contener el valor de un ID de un elemento del mismo documento

Un atributo del tipo IDREFS contiene un conjunto de (0 o maacutes) valores ID Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

ltpersona id=ldquo898rdquo padre=ldquo332rdquo madre=ldquo336rdquo hijos=ldquo982 984 986rdquogt

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 19: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Ejemplo banco-2 Ejemplo banco-2 datos XMLdatos XML con ID e IDREF con ID e IDREF

ltbanco-2gtltcuenta nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102nuacutemero_cuenta=ldquoA-401rdquo propietarios=ldquoC100 C102rdquogt

ltnombre_sucursalgt central ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt

hellipltcliente id_cliente=ldquoC100rdquo cuentas=ldquoA-401id_cliente=ldquoC100rdquo cuentas=ldquoA-401rdquogt

ltnombre_clientegt Pepe ltnombre_clientegt ltcalle_clientegt camino ltcalle_clientegt ltciudad_clientegt San Juanltciudad_clientegt

ltclientegt ltcliente id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402id_cliente=ldquoC102rdquo cuentas=ldquoA-401 A402rdquogt

ltnombre_clientegt Mary ltnombre_clientegt ltcalle_clientegt Las piedras ltcalle_clientegt ltciudad_clientegt San Juan ltciudad_clientegt

ltclientegt

hellip ltbanco-2gt

Notar que a diferencia del ej Banco aquiacute no se usa un elemento depositante Lo mismo ocurre si usamos anidamiento (ver a cont ejemplo Banco-1)

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 20: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 21: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Ejemplo Banco-2 Ejemplo Banco-2 DTDDTD

DTD del Banco con atributos ID e IDREF

ltDOCTYPE banco-2[ ltELEMENT banco (( cuenta | cliente)+)gt

ltELEMENT cuenta (sucursal balance)gt ltATTLIST cuenta nuacutemero_cuenta ID REQUIRED

propietarios IDREFS REQUIREDgt ltELEMENT cliente (nombre_cliente calle_cliente ciudad_cliente)gt ltATTLIST cliente

id_cliente ID REQUIRED cuentas IDREFS REQUIREDgt

hellip faltan declaraciones para sucursal balance nombre_cliente calle_cliente y ciudad_cliente]gt

ir DTD del ejemplo Banco

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 22: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

ltDOCTYPE pais [ltELEMENT pais ((provinciaciudad))gtltELEMENT provincia (codProvnombreProvcapitalciudades-en)gtltATTLIST provincia idProv ID REQUIREDgtltELEMENT codProv (PCDATA)gtltELEMENT nombreprov (PCDATA)gtltELEMENT capital EMPTYgtltATTLIST capital idrefCiudad IDREF REQUIREDgtltELEMENT ciudades-en EMPTYgtltATTLIST ciudades-en idrefCiudad IDREF REQUIREDgtltELEMENT ciudad (codCiudad nombreCiudaddeprovincia)gtltATTLIST ciudad idCiudad ID REQUIRED gtltELEMENT codCiudad (PCDATA)gtltELEMENT nombreCiudad (PCDATA)gtltELEMENT deprovincia EMPTYgtltATTLIST deprovincia idrefprov IDREF REQUIREDgt ]gt

DTD OtroEjemplohellipDTD OtroEjemplohellip

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 23: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

DTDs RecursivosDTDs Recursivos

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona la madre

persona )gt el Padre

]gt

Cual es el problema con esto

Cada persona deberaacute tener padre y madre Esto lleva atener infinitos datos o a queuna persona seadescendiente de si mismo

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 24: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

DTDs Recursivos contDTDs Recursivos cont

ltDOCTYPE genealogiacutea [

ltELEMENT genealogiacutea (persona)gt

ltELEMENT persona (

nombre

fechadeNac

persona madre

persona )gt Padre

]gt

Que problema subsiste todaviacutea

No podemos distinguirentre padre y madrePor ejemploSi una persona tiene solamente padre iquest como saber que se trata del padre y no de la madre

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 25: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Solucioacuten usando atributos ID e IDREFSolucioacuten usando atributos ID e IDREF

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre)gt

ltELEMENT nombre (PCDATA)gt

ltATTLIST persona id IDREQUIRED

madre IDREFIMPLIED

padre IDREFIMPLIED

hijos IDREFSIMPLIEDgt

]gt

Los IDREFs no tienen tipoLos IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no seraacuten obligatoriamente elementos persona El atributo madre no necesariamente seraacute una referencia a una

persona del sexo femenino y viceversa para el padre

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 26: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltfamiliagt

ltpersona id=ldquolisardquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Lisa Simpson ltnombregt

ltpersonagt

ltpersona id=ldquobartrdquo madre=ldquomargerdquo padre=ldquohomerordquogt

ltnombregt Bart Simpson ltnombregt

ltpersonagt

ltpersona id=ldquomargerdquo hijos=ldquobart lisardquogt

ltnombregt Marge Simpson ltnombregt

ltpersonagt

ltpersona id=ldquohomerordquo hijos=ldquobart lisardquogt

ltnombregt Homero Simpson ltnombregt

ltpersonagt

ltfamiliagt

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 27: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Una especificacioacuten alternativa para el DTD del Una especificacioacuten alternativa para el DTD del ejemplo anteriorejemplo anterior

ltxml version=10 encoding=UTF-8gt

ltDOCTYPE familia [

ltELEMENT familia (persona)gt

ltELEMENT persona (nombre madre padre hijos)gt

ltATTLIST persona id ID REQUIREDgt

ltELEMENT nombre (PCDATA)gt

ltELEMENT madre EMPTYgt

ltATTLIST madre m_idref IDREF REQUIREDgt

ltELEMENT padre EMPTYgt

ltATTLIST padre p_idref IDREF REQUIREDgt

ltELEMENT hijos EMPTYgt

ltATTLIST hijos h_idrefs IDREFS REQUIREDgt

]gt

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 28: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

ltfamiliagt

ltpersona id=margegt

ltnombregt Marge Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=homerogt

ltnombregt Homero Simpson ltnombregt

lthijos h_idrefs=bart lisagt

ltpersonagt

ltpersona id=bartgt

ltnombregt Bart Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltpersona id=lisagt

ltnombregt Lisa Simpson ltnombregt

ltmadre m_idref=margegt

ltpadre p_idref=homerogt

ltpersonagt

ltfamiliagt

Datos XML compatibles con el DTD anteriorDatos XML compatibles con el DTD anterior

ltELEMENT persona (nombre madre padre hijos)gt helliphellip

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 29: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Limitaciones de los DTDsLimitaciones de los DTDs

Tipos de elementos y atributos

Todos los valores son strings no hay enteros reales etc

Dificultad para especificar conjuntos desordenados de subelementos

(A | B) permite especificar un conjunto desordenado pero No puede asegurar que cada A y B ocurra soacutelo una vez

IDs e IDREFs son ldquountypedrdquo

El atributo ldquopropietariordquo de una cuenta puede contener una referencia a otra cuenta lo cual no tiene sentido

El atributo propietario deberiacutea estar restringido para hacer referencia soacutelo a elementos cliente

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 30: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Espacio de nombresEspacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes

organizaciones causando confusioacuten sobre documentos intercambiados Especificar un string uacutenico como nombre de un elemento evita confusiones La mejor solucioacuten usar nombre-uacuteniconombre-de-elemento Se usa XML Namespaces (espacio de nombres) El espacio de nombres por defecto se declara con el atributo xmlns Los otros espacio de nombres son declarados con xmlnsltsynonymgt

ltbanco XmlnsFB=lsquohttpwwwFirstBankcomrsquogt hellip

ltFBsucursalgt

ltFBnombresucursalgtDowntownltFBnombresucursalgt

ltFBciudadsucursalgt Brooklyn ltFBciudadsucursalgt

ltFBsucursalgthellip

ltbancogt

Veamos esto en maacutes detalle

o alias o prefijo

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 31: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Espacio de nombresEspacio de nombresOtro ejemplo de nombres que pueden generar confusioacuten

ltxml version=10 encoding=iso-8859-1gtltdirecciongt ltcallegtAvd Diagonal 8ltcallegt ltciudadgtBarcelonaltciudadgt ltprovinciagtBarcelonaltprovinciagt ltpaisgtEspantildealtpaisgtltdirecciongt

ltxml version=10 encoding=iso-8859-1gtltservidorgt lturlgthttpwwwpalotescomlturlgt ltdirecciongt12345678ltdirecciongtltservidorgt

Los dos documentos XML anteriores tienen en comuacuten el elemento direccion Son dos vocabularios diferentes pero puede ser que en alguacuten momento tengamos que integrarlos en un mismo documento XML Supongamos que juntos ambos documentos nos ofrecen informacioacuten sobre la localizacioacuten de una empresa su direccioacuten fiacutesica y su direccioacuten en Internet Estaacute claro que el elemento direccioacuten va a provocar problemas

Una posible solucioacuten es ponerlo de la siguiente manera

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 32: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Espacio de nombresEspacio de nombres

Ej localizacioacuten de una empresa con direccioacuten fiacutesica y direccioacuten en Internet

ltxml version=10 encoding=iso-8859-1gtltempresagt ltnombregtPalotes SAltnombregt ltdirfisdireccion xmlnsdirfis=httpwwwpalotescomdireccionfisicagt ltdirfiscallegtAvd Diagonal 8ltdirfiscallegt ltdirfisciudadgtBarcelonaltdirfisciudadgt ltdirfisprovinciagtBarcelonaltdirfisprovinciagt ltdirfispaisgtEspantildealtdirfispaisgt ltdirfisdirecciongt ltdirservservidor xmlnsdirserv=httpwwwpalotescomdireccionservidorgt ltdirservurlgthttpwwwpalotescomltdirservurlgt ltdirservdirecciongt12345678ltdirservdirecciongt ltdirservservidorgtltempresagt

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 33: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Espacio de NombresEspacio de Nombres

capital de un pais ycapital de una transaccioacuten tienendiferentes significados y espacios semaacutenticos (teacutermino geograacutefico vs teacutermino econoacutemico-financiero)

Los espacios de nombres son una solucioacuten a los problemas de homoniacutemia Permiten eliminar ambiguumledades calificando los nombres que se usan en los documentos XML

Veamos un ejemplo en que en un mismo documento apareceriacutean nombres ideacutenticos (pe capital) para elementos diferentes

ltinversionesgt

ltpais nombre=ldquoEspantildeardquogt

ltcapitalgt Madrid ltcapitalgt

ltcapitalgt 200000euro ltcapitalgt

ltpaisgt

ltinversionesgt

Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 34: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Solucion1Recurrir a una autoridad mundial que asigne nombreshellip complicado

Solucion2Otra solucioacuten es utilizar un mecanismo ya existente por eso se pensoacute en

los URIs (Uniform Resource Identifiers) si bien un URI es una cadena de caracteres que identifica uniacutevocamente un recurso en una red o sistema aquiacute no se trata de utilizar un URI como enlace ni tiene por queacute tener contenido los URI soacutelo se utilizan para que el nombre sea uacutenico Ejemploldquohttpwwwhipertextoinfordquo

Aquiacute definimos un espacio de nombres XML como una coleccioacuten de nombres identificados por una referencia URI que se utiliza en los documentos XML para identificar elementos y atributos

Para definir el espacio de nombres al que pertenece un elemento es necesario antildeadir un atributo a la definicioacuten de dicho elemento donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera aunque por convencioacuten suelen ser URLs

Espacio de NombresEspacio de Nombres

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 35: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Solucion2hellip

Asociamos entonces a cada etiqueta un espacio de nombresPara el ejemplo visto usaremos httpwwwbolsacom y httpwwwgeoges

Asi sin ambiguedades el ejemplo queda ltldquohttpwwwbolsaesrdquoinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlns=ldquohttpwwwgeogesrdquogt ltldquohttpwwwgeogcomrdquopaiacutes httpwwwgeogcomrdquonombre =ldquoEspantildeardquogt ltldquohttpwwwgeogcomrdquocapitalgtMadridltldquohttpwwwgeogcomrdquocapitalgt ltldquohttpwwwbolsaesrdquocapitalgt20000euro ltldquohttpwwwbolsaesrdquocapitalgt ltldquohttpwwwgeogcomrdquopaiacutesgt ltldquohttpwwwbolsaesrdquoinversionesgt

Espacio de NombresEspacio de Nombres

Aquiacute no se usaron alias o prefijos

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 36: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Solucion3 para no escribir toda la URI se usan alias o prefijos maacutes cortos

xmlnsalias define un alias en el aacutembito de un elemento

Apliquemos esto al ejemplo

ltbolsainversiones

xmlnsbolsa=ldquohttpwwwbolsacomrdquo

xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltbolsacapitalgt 200000 ltbolsacapitalgt

ltgeopaisgt

ltbolsainversionesgt

El alcance de un prefijo de un espacio de nombres comprende desde la etiqueta de inicio de un elemento XML en la que se declara hasta la etiqueta final de dicho elemento XML

Espacio de NombresEspacio de Nombres

bolsa y geo son los alias usados en este ejemplo

Se pueden declarar varios espacios de nombres como atributos de un uacutenico elemento (en este caso del elemento inversiones)

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 37: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Solucion3hellip

Idem anterior pero con asignacioacuten dinaacutemica esto es se van asociando

espacios de nombre a los elementos seguacuten van apareciendo

ltbolsainversiones xmlnsbolsa=ldquohttpwwwbolsaesrdquogt

ltgeopaiacutes xmlnsgeo=ldquohttpwwwgeogcomrdquo geonombre=ldquoEspantildeardquogt

ltgeocapitalgtMadridltgeocapitalgt

ltbolsacapitalgt2000euroltbolsacapitalgt

ltgeopaiacutesgt

ltbolsainversiones

Espacio de NombresEspacio de Nombres

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 38: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Variante de la solucioacuten 3 usar un espacio de nombres por defecto

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt

ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgt

ltcapitalgt 200000 ltcapitalgt

ltgeopaisgt

ltinversionesgt

En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es httpwwwbolsacom

Un espacio de nombres por defecto definido en la etiqueta de inicio de un elemento XML se aplica a todos elementos sin prefijo del aacutembito del elemento pero no a los atributos

Espacio de NombresEspacio de Nombres

No tiene prefijo

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 39: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Resumiendo

Los espacios de nombres se crearon para evitar las colisiones en los diferentes moacutedulos de software capaces de reconocer las marcaciones del lenguaje XML

Tambieacuten puede ocurrir que aunque los nombres en un documento sean diferentes el software que trabaja con ellos (por ejemplo un buscador) necesite diferenciarlos claramente para darles un tratamiento diferente

Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de internet aunque esto es recomendable para reducir la posibilidad de que diferentes espacios de nombres usen identificadores iguales Otra motivacioacuten para esta modularidad es que si se dispone de un conjunto de marcaciones para el que ya existe software disponible es mejor la reutilizacioacuten de estas marcaciones que inventar nuevas Asiacute se considera que las construcciones de ciertos documentos deben usar nombres universales cuyo aacutembito se extienda maacutes allaacute del propio documento

Espacio de NombresEspacio de Nombres

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 40: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Resumiendohellip

Una de las pruebas del eacutexito del XML es la gran cantidad de vocabularios XML (DTDs) que estaacuten apareciendo En algunas ocasiones al realizar nuestros documentos XML podemos encontrarnos en la necesidad de utilizar varios de estos vocabularios

Por ello aunque un espacio de nombres XML no necesita que su vocabulario esteacute definido es una buena praacutectica usar un DTD o un esquema XML para definir la estructura de datos en la ubicacioacuten URI del espacio de nombres

Por ejemplo es posible que estemos escribendo un artiacuteculo cientiacutefico en formato XML y que tengamos la necesidad de incorporar foacutermulas matemaacuteticas Podemos perfectamente desarrollar nuestras propias etiquetas pero iquestpor queacute no utilizar las que nos proporciona el vocabulario MathML

Espacio de NombresEspacio de Nombres

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 41: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Los espacios de nombre nacieron con posterioridad a los DTDsPor eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD Por ejemplo

ltDOCTYPE inversiones [

ltELEMENT inversiones (geopaiacutes)gt

ltELEMENT geopaiacutes (geocapitalcapital) gt

ltELEMENT geocapital (PCDATA)gt

ltELEMENT capital (PCDATA)gt

ltATTLIST inversiones

xmlns CDATA FIXED httpwwwbolsaes

xmlnsgeo CDATA FIXED httpwwwgeogcomgt

ltATTLIST geopaiacutes

geonombre CDATA REQUIRED gt

]gt

Espacios de Nombres y DTDsEspacios de Nombres y DTDs

ltinversiones xmlns=ldquohttpwwwbolsacomrdquo xmlnsgeo=ldquohttpwwwgeogesrdquogt ltgeopais geonombre=ldquoEspantildeardquogt

ltgeocapitalgt Madrid ltgeocapitalgtltcapitalgt 200000 ltcapitalgt

ltgeopaisgtltinversionesgt

Documento XML

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 42: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

XML XML SchSchema vs DTDsema vs DTDs

Un esquema XML es maacutes sofisticado que un DTD y no tiene sus limitaciones soporta

Built-in types

Eg integer string etc

Tambieacuten soporta restricciones de valores minmax

Tipos complejos definidos por el usuario a partir de tipos simples

Un mismo elemento puede tener diferentes tipos dependiendo de donde ese elemento se anida

Restricciones de unicidad y de clave foraacutenea herencia etc

A diferencia de los DTDs los esquemas usan la misma sintaxis de los documentos XML

Mecanismos para integrar espacios de nombres

Representacioacuten maacutes standard pero maacutes complicada

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 43: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

XML XML SchSchema vs DTDsema vs DTDs

Al igual que en un DTD el propoacutesito de un esquema XML es definir los bloques de construccioacuten vaacutelidos para un documento XML

Un esquema XML define Elementos que pueden aparecer en un documento Atributos que pueden aparecer en un documento Que elementos son hijos El orden de los elementos hijo El nuacutemero de elementos hijo Si un elemento es vaciacuteo o puede incluir texto Tipos de datos para elementos y atributos Valores por defecto y valores fijos para elementos y atributos

Ventajas sobre los DTDs Los esquemas XML son maacutes ricos y potentes que los DTDs Los esquemas XML son escritos en XML Los esquemas XML soportan tipos de datos Los esquemas XML soportan espacios de nombres (namespaces) Los esquemas XML son extensibles

Se pueden crear nuevos tipos de datos un esquema se puede reusar en otros esquemas se pueden referenciar muacuteltiples esquemas en un documento etc

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 44: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

XML XML SchSchemaema otras caracteriacutesticasotras caracteriacutesticas

Elementos y atributos son ldquotipadosrdquo

Elementos que contienen sub-elementos tienen tipo complejo

Elementos con atributos tienen tipo complejo

Los atributos son de tipo simple

los tipos tienen nombre o pueden ser anoacutenimos

Un esquema es definido en un documento esquema-XML

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 45: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

ltxml version=10gtltpurchaseOrder orderDate=ldquo2004-10-20gt ltshipTo country=USgt ltnamegtAlice Smithltnamegt ltstreetgt123 Maple Streetltstreetgt ltcitygtMill Valleyltcitygt ltstategtCAltstategt ltzipgt90952ltzipgt ltshipTogt ltbillTo country=USgt ltnamegtRobert Smithltnamegt ltstreetgt8 Oak Avenueltstreetgt ltcitygtOld Townltcitygt ltstategtPAltstategt ltzipgt95819ltzipgt ltbillTogt ltcommentgtHurry my lawn is going wildltcommentgt ltitemsgt ltitem partNum=872-AAgt ltproductNamegtLawnmowerltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt14895ltUSPricegt ltcommentgtConfirm this is electricltcommentgt ltitemgt ltitem partNum=926-AAgt ltproductNamegtBaby MonitorltproductNamegt ltquantitygt1ltquantitygt ltUSPricegt3998ltUSPricegt ltshipDategt2004-12-21ltshipDategt ltitemgt ltitemsgt ltpurchaseOrdergt

documento para elejemplo ldquoorden de comprardquoen archivo lsquopoxmlrsquo

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 46: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

ltxsdelement name=purchaseOrder type=PurchaseOrderTypegt

ltxsdelement name=comment type=xsdstringgt

ltxsdcomplexType name=PurchaseOrderTypegt ltxsdsequencegt ltxsdelement name=shipTo type=USAddressgt ltxsdelement name=billTo type=USAddressgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=items type=Itemsgt ltxsdsequencegt ltxsdattribute name=orderDate type=xsddategt ltxsdcomplexTypegt

ltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

documento-esquema para el ejemplo anterios en archivo lsquopoxsdrsquo

xmlschemedocument

(cualquier otro prefijo para el espacio de nombres puede ser usado)

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 47: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

ltxsdcomplexType name=Itemsgt ltxsdsequencegt ltxsdelement name=ldquoItem minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=productName type=xsdstringgt ltxsdelement name=quantitygt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=USPrice type=xsddecimalgt ltxsdelement ref=comment minOccurs=0gt ltxsdelement name=shipDate type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=partNum type=SKU use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt

lt-- Stock Keeping Unit a code for identifying products --gt ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

ltxsdschemagt

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 48: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

bullespacio de nombres del esquema ltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt

bullannotation brinda informacioacuten a lectores humanos ltxsdannotationgt ltxsddocumentation xmllang=engt Purchase order schema for Examplecom Copyright 2000 Examplecom All rights reserved ltxsddocumentationgt ltxsdannotationgt

bull ejemplo de tipo complejoltxsdcomplexType name=USAddressgt ltxsdsequencegt ltxsdelement name=name type=xsdstringgt ltxsdelement name=street type=xsdstringgt ltxsdelement name=city type=xsdstringgt ltxsdelement name=state type=xsdstringgt ltxsdelement name=zip type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=country type=xsdNMTOKENgt ltxsdcomplexTypegt

Este es un elemento XML con 2 subelementos (sequence y attribute) Todos los elementos en el documento que sean del tipo ldquoUSAddressrdquo debe satisfacer esta declaracioacuten de tipo

bull deben tener 5 subelementos en el orden especificadobull deben tener un atributo lsquocountryrsquo

el tipo NMTOKEN soacutelo puede contener letras

diacutegitos punto [ ] guioacuten [ - ] subrayado [ _ ] y dos puntos [ ] Los del tipo

NMTOKENS pueden contener los mismos

caracteres que NMTOKEN maacutes espacios en blanco

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 49: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Tipos simples (Built-in )

bullXML simple types ldquostringrdquo ldquobyterdquo ldquointegerrdquo ldquolongrdquo ldquodecimalrdquo ldquofloatrdquo ldquodoublerdquo ldquobooleanrdquo ldquodateTimerdquo ldquoIDrdquo ldquoIDREFrdquo ldquoIDREFSrdquo ldquoanyTyperdquo hellip

ldquoanyTyperdquo es el tipo universal

bull Restricciones sobre los tipos simples

ltxsdsimpleType name=myIntegergt ltxsdrestriction base=xsdintegergt ltxsdminInclusive value=10000gt ltxsdmaxInclusive value=99999gt ltxsdrestrictiongt ltxsdsimpleTypegt

El elemento ldquosimpleTyperdquo tiene un sub-elemento ldquorestrictionrdquo con dos subelementos llamados facetas o facets

ltxsdsimpleType name=SKUgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 50: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Ejemplo banco Ejemplo banco datos XMLdatos XML ltbancogt ltcuentagt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_sucursalgt caucete ltnombre_sucursalgt ltbalancegt 500 ltbalancegt

ltcuentagt ltclientegt

ltnombre_clientegt Peacuterez ltnombre_clientegt ltcalle_clientegt el sauce 123 ltcalle_clientegt ltciudad_clientegt angaco ltciudad_clientegt

ltclientegt ltdepositantegt

ltnuacutemero_cuentagt A-101 ltnuacutemero_cuentagt ltnombre_clientegt Peacuterez ltnombre_clientegt

ltdepositantegt

ltbancogt volver

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 51: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Documento de un esquema XML ejemplo ldquobancordquoDocumento de un esquema XML ejemplo ldquobancordquo

ltxsschema xmlnsxs=httpwwww3org2001XMLSchemagtltxselement name=ldquobancordquo type=ldquoTipoBancordquogtltxselement name=ldquocuentardquogt

ltxscomplexTypegt ltxssequencegt

ltxselement name=ldquonuacutemero_cuentardquo type=ldquoxsstringrdquogt ltxselement name=ldquonombre_sucursalrdquo type=ldquoxsstringrdquogt ltxselement name=ldquobalancerdquo type=ldquoxsdecimalrdquogt ltxssequencegt ltxscomplexTypegt

ltxselementgthellip falta definicioacuten de cliente y depositante hellipltxscomplexType name=ldquoTipoBancordquogt

ltxssequencegtltxselement ref=ldquocuentardquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquoclienterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogtltxselement ref=ldquodepositanterdquo minOccurs=ldquo0rdquo maxOccurs=ldquounboundedrdquogt

ltxssequencegtltxscomplexTypegtltxsschemagt

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 52: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

eleccioacuten del prefijo ldquoxsrdquo cualquier otro prefijo para el espacio de nombres pudo ser elegido

El elemento ldquobancordquo es del tipo ldquoTipoBancordquo que es definido separadamente

xscomplexType es usado despueacutes para crear el tipo complejo ldquoTipoBancordquo (ver ltxscomplexType name=ldquoTipoBancordquogt)

El elemento ldquocuentardquo tiene su tipo (complex) definido ldquoen lineardquo

Documento de un esquema XML ejemplo ldquobancordquo---Documento de un esquema XML ejemplo ldquobancordquo---

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 53: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Mas caracteriacutesticas de XML SchemaMas caracteriacutesticas de XML Schema

Etiqueta attribute para especificar atributos xsdattribute name=country type=xsdNMTOKENgt Agregar ldquorequiredrdquo significa que un valor debe ser especificado

Restriccioacuten keykey en el ejemplo banco los ldquonuacutemeros de cuentardquo son ldquola claverdquo para identificar a los elementos cuenta

ltxskey name = ldquoclave_cuentaclave_cuentardquogtltxsselector xpath = ldquobancocuentardquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeygt

Puedo hacer una restriccioacuten ldquoclave_clienterdquo para usar nombre_cliente como clave de cliente

Restriccioacuten keyrefkeyref clave foraacutenea para cuenta en depositanteltxskeyref name = ldquoclave_depositacuentardquo refer=ldquoclave_cuentaclave_cuentardquogt

ltxsselector xpath = ldquobancodepositanterdquogtltxsfield xpath = ldquonuacutemero_cuentardquogt

ltxskeyrefgt Puedo hacer una restriccioacuten similar con refer=ldquoclave_clienterdquo en la clave

foraacutenea para cliente en depositante

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 54: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Consultas y Transformacioacuten de datos XMLConsultas y Transformacioacuten de datos XML

TraslacioacutenTraslacioacuten de informacioacutende informacioacuten de un esquema XML a otro

ConsultaConsulta de datos XML (Querying)

Los dos temas estaacuten relacionados y se manejan con las mismas herramientas

Lenguajes estandar de ConsultasTransformacioacuten de datos XML

XPath

Lenguaje simple consistente en expresiones de camino

XQuery

ldquoXML query languagerdquo lenguaje de propoacutesito general para XML

XSLT

Lenguaje disentildeado para transformar documentos XML a XML y XML a HTML

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 55: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Aacuterboles como modelo de datos XMLAacuterboles como modelo de datos XML

Los lenguajes de consulta y transformacioacuten estaacuten basados en el modelo aacuterbol de datos XML

Un documento XML es modelado como un aacuterbol con nodos correspondiendo a elementos y atributos

Los nodos Elemento tienen hijos que pueden ser atributos o subelementos

El Texto en un elemento es modelado como un nodo hijo de dicho elemento

Los hijos de un nodo estaacuten ordenados de acuerdo a su orden en el documento XML

Los nodos Elemento y Atributo tienen como padre a otro nodo Elemento (excepto por el nodo raiacutez)

El nodo raiacutez tiene un soacutelo hijo que es el elemento raiacutez del documento

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 56: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Modelo de DatosRaiz

CoacutedigoCr

ltEstudiantesgt ltEstudiante StudId=ldquodrrdquogt ltNombregt ltNpilagt Juan ltNpilagt ltApellgt Perez ltApellgt ltNombregt Esp1 ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltCurso Semestre=ldquohelliprdquo CoacutedigoCr=ldquohelliprdquogt ltEstudiantegt ltEstudiantegt hellip ltEstudiantegt ltEstudiantesgt

Raiz

Estudiantes

Semestre

Tipos de Nodos

Documento

Elemento

Texto

atributo

Estudiantes

Curso

EstudianteEstudiante

Nombre

Npila Apell

CursoStudId

CoacutedigoCrldquodr rdquo

ldquoJuanrdquo ldquoPerezrdquo

ldquoEsp1rdquo

SemestreSemestre

ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo ldquohelliprdquo

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 57: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

XQueryXQuery

Estandarizado por World Wide Web Consortium (W3C)

Tomado de un libro de texto del 2005 La versioacuten final del estandar puede diferir en algunos aspectos menores

XQuery se deriva del lenguaje Quilt el cual a su vez toma caracteriacutesticas de SQL XQL and XML-QL

XQuery usa la sintaxis for hellip let hellip where hellip order by hellipreturn hellip

for SQL from

where SQL where

order by SQL order by

return SQL select

let permite el uso de variables temporales y no tiene equivalente en SQL

F L W O R(Se pronuncia flower)

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 58: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Breve referencia a XpathBreve referencia a Xpath

Expresioacuten coincide (matches) con

bib un elemento bib

cualquier elemento

el elemento raiz

bib un elemento bib bajo la raiz

bibpaper un elemento paper en bib

bibpaper un elemento paper en bib a cq profundidad

paper un elemento paper a cq profundidad

paper|book un elemento paper o un elemento book

price un atributo price

bibbookprice un atributo price en book en bib

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 59: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Sintaxis FLWOR en XQuerySintaxis FLWOR en XQuery

La claacuteusula For usa expresiones XPath y la variable en la claacuteusula for asume valores del conjunto retornado por XPath

Expresiones simples en XQuery Encontrar todas las cuentas con balance gt 400 con cada resultado

encerrado entre etiquetas ltaccount_numbergt ltaccount_numbergt

for $x in bancocuenta let $nucta= $x numero_cuenta where $x balance gt 400 return ltaccount_numbergt $nucta ltaccount_numbergt

Los Items en la claacuteusula return son texto XML a menos que esteacuten encerrados entre en cuyo caso son items evaluados

La clausula Let no es realmente necesaria en esta consulta que puede hacerse en Xpath de la siguiente manera

for $x in bancocuenta[balancegt400]return ltnuacutemero_cuentagt $xnumero_cuenta ltnuacutemero_cuentagt

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 60: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

XQueryXQuery Constructores Constructores de elementosde elementos

XQuery permite trabajar directamente con estructuras XML Los constructores de elementos permiten embeber estructuras XML

directamente en la programacioacuten con XQuery Por ejemplo lo siguiente es perfectamente vaacutelido en una expresioacuten XQuery

ltbidgt ltitemnogt47ltitemnogt ltuseridgttsmithltuseridgt ltbid_amountgt3425ltbid_amountgt ltbidgt

Sin embargo para poder construir estructuras XML de manera dinaacutemica es necesario usar expresiones XQuery embebidasexpresiones XQuery embebidas en el constructor de un elemento colocando dicha expresioacuten entre llavescolocando dicha expresioacuten entre llaves Esta es la forma maacutes frecuente en que se usan los constructores de elementos en la claacuteusula Return de una expresioacuten FLWOR

ltbidgt ltitemnogt $i ltitemnogt ltuseridgt $u ltuseridgt ltbid_amountgt $a ltbid_amountgt ltbidgt

Cualquier expresioacuten XQuery vaacutelida puede ser embebida lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 61: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

ltltbibbibgtgtltltbookbookgt gt

ltltpublisherpublishergt Addison-Wesley ltgt Addison-Wesley ltpublisherpublishergtgt lt ltauthorauthorgt Serge Abiteboul ltgt Serge Abiteboul ltauthorauthorgtgt lt ltauthorauthorgt gt

ltltfirst-namefirst-namegt Rick ltgt Rick ltfirst-namefirst-namegtgt lt ltlast-namelast-namegt Hull ltgt Hull ltlast-namelast-namegtgt lt ltauthorauthorgtgt lt ltauthorauthorgt Victor Vianu ltgt Victor Vianu ltauthorauthorgtgt lt lttitletitlegt Foundations of Databases ltgt Foundations of Databases lttitletitlegtgt lt ltyearyeargt 1995 ltgt 1995 ltyearyeargtgtltltbookbookgtgtltltbookbook priceprice=ldquo55rdquogt=ldquo55rdquogt lt ltpublisherpublishergt Freeman ltgt Freeman ltpublisherpublishergtgt lt ltauthorauthorgt Jeffrey D Ullman ltgt Jeffrey D Ullman ltauthorauthorgtgt lt lttitletitlegt Principles of Database and Knowledge Base Systemsgt Principles of Database and Knowledge Base Systems ltlttitletitlegtgt lt ltyearyeargt 1998 ltgt 1998 ltyearyeargtgtltltbookbookgtgt

ltltbibbibgtgt

Documento a ser consultado luego con XqueryDocumento a ser consultado luego con Xquery

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 62: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

FOR $x$x IN doc(bibxml)bibbibbookbookRETURN ltlibrolibrogt lttiacutetulotiacutetulogt $x $xtitletitletext() lttiacutetulotiacutetulogt ltantildeoantildeogt $x $xyearyeartext() ltantildeoantildeogt ltlibrolibrogt

En Xquery Xquery se puede construir el resultado XML como se desee

ltlibrolibrogt lttiacutetulotiacutetulogt Foundations of DatabasesFoundations of Databases lttiacutetulotiacutetulogt ltantildeogt 19951995 ltantildeogtltlibrolibrogtltlibrolibrogt lttiacutetulotiacutetulogt Principles of Database and Knowledge Base SystemsPrinciples of Database and Knowledge Base Systems lttiacutetulotiacutetulogt ltantildeoantildeogt 19981998 ltantildeoantildeogtltlibrolibrogt

Buscar todos los tiacutetulos de libros y el antildeo en que fueron publicadosBuscar todos los tiacutetulos de libros y el antildeo en que fueron publicados

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 63: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Xquery Queries AnidadosXquery Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann listar

todos los otros libros de ese autor

FOR $b$b IN doc(ldquobibxmlrdquo)bibbib $$a IN $b$bbookbook[publisherpublisher text()=ldquoMorgan Kaufmannrdquo]authorauthorRETURN ltresultadoresultadogt $a$a FOR $t$t IN $b$bbookbook[authorauthortext()=$a$atext()]titletitle RETURN $t$t ltresultadoresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

ltresultadogt ltauthorgtJonesltauthorgt lttitlegt abc lttitlegt lttitlegt lttitlegt ltresultadogt ltresultadogt ltauthorgt Smith ltauthorgt lttitlegt ghi lttitlegt ltresultadogt

XMLXML

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 64: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Xquery Queries AnidadosXquery Queries Anidados

El siguiente query convierte datos de la estructura chata de banco (donde cuenta cliente y depositante estaacuten al mismo ldquonivelrdquo) a la estructura anidada de banco-1 (ver diapositiva siguiente)

ltbanco-1gt for $c in bancocliente return

ltclientegt $c for $d in bancodepositante[nombre_cliente = $cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta] return $a

ltclientegt ltbanco-1gt

$c denota todos los hijos del nodo $c sin etiquetas de nivel superior

$ctext() da el contenido texto de un elemento sin etiquetas o subelementos

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 65: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Ejemplo banco-1 Ejemplo banco-1 datos XMLdatos XML con anidamiento con anidamiento

ltbanco-1gt ltclientegt

ltnombre_clientegt Huerta ltnombre_clientegt ltdomicilio_clientegt Piedras 2020 ltdomicilio_clientegt ltciudad_clientegt San Juan ltciudad_clientegt ltcuentagt

ltnuacutemero_cuentagt A-102 ltnuacutemero_cuentagt ltnombre_sucursalgt jachal ltnombre_sucursalgt ltbalancegt 400 ltbalancegt

ltcuentagt ltcuentagt hellip hellip hellip ltcuentagt

ltclientegt

ltbanco-1gt

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 66: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

XqueryXquery Funcion Funciones es de Agregacioacuten (Aggregate function) de Agregacioacuten (Aggregate function)

Toman una coleccioacuten de valores y entregan un resultado escalar

Buscar todos los libros con maacutes de 3 autores

countcount = funcioacuten para contaravg avg = para calcular promediosumsum = para calcular la sumadistinct-valuesdistinct-values = para eliminar duplicados

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

FOR $x$x IN doc(bibxml)bibbibbookbookWHERE countcount(($x$xauthorauthor)gt3 RETURN $x$x

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

for $a in distinct-valuesdistinct-values(doc(bibxml)author)

return ltautorgt $a ltautorgt

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 67: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Buscar libros cuyos precios sean mayores que el promedio

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

ltrespuestagtfor $b in doc(bibxml)bibletlet $a = avg($bbookpricetext())forfor $x in $bbookwhere ($xpricetext() gt $a)return $xltrespuestagt

LETLET liga una variable a un (1) valorFORFOR itera una variable sobre una lista de valores

XqueryXquery FuncioFunciones de Agregacioacutennes de Agregacioacuten

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 68: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Xquery FOR vs LETXquery FOR vs LET

ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt ltresultadogt ltbookgtltbookgtltresultadogt

ltresultadogt ltbookgtltbookgt ltbookgtltbookgt ltbookgtltbookgt ltresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

FOR $x$x IN bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con variables nodo iteracioacuten

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

LET $x$x = bibbibbookbookRETURN ltresultadoresultadogt $x$x ltresultadoresultadogt

Liga con 1 variable de coleccioacuten

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 69: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Xquery JoinsXquery Joins

Los Joins son especificados de manera similar a SQL

Para el ejemplo banco obtener informacioacuten de clientes y sus cuentas

for $a in bancocuenta $c in bancocliente $d in bancodepositante

where $anuacutemero_cuenta = $dnuacutemero_cuenta and $cnombre_cliente = $dnombre_cliente

return ltcli_cuentagt $c $a ltcli_cuentagt

La misma consulta puede ser expresada con la restriccioacuten expresada como en XPath

for $a in bancocuenta $c in bancocliente

$d in bancodepositante[ nuacutemero_cuenta = $anuacutemero_cuenta and nombre_cliente = $cnombre_cliente] return ltcli_cuentagt $c $a ltcli_cuentagt

Elemde depositante

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 70: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

OrdenamientOrdenamiento en XQueryo en XQuery La claacuteusula order by puede ser usada al final de cualquier expresioacuten Por ejemplo

para retornar clientes ordenados por nombre

for $c in bancocliente order by $cnombre_cliente

return ltclientegt $c ltclientegt

Para ordenar en muacuteltiples niveles (por ejemplo ordenar por nombre_cliente y por nuacutemero_cuenta dentro de cada cliente al convertir datos de banco a banco-1)

ltbanco-1gt for $c in bancocliente

order by $cnombre_cliente

return ltclientegt $c

for $d in bancodepositante[nombre_cliente=$cnombre_cliente] $a in bancocuenta[nuacutemero_cuenta=$dnuacutemero_cuenta]

order by $anuacutemero_cuenta

return ltcuentagt $a ltcuentagt

ltclientegt

ltbanco-1gt

Toda los datos XML de los clientes ordenada por nombre de cliente

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 71: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Funciones y otras caracteriacutesticas de XQueryFunciones y otras caracteriacutesticas de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema

ejemplo funcioacuten que retorna los balances de las cuentas de un cliente

function balances(xsstring $c) returns list(xsdecimal) for $d in bancodepositante[nombre_cliente= $c] $a in bancocuenta[numero_cuenta= $dnumero_cuenta] return $abalance

Los tipos son opcionales para los paraacutemetros y valores de retorno

El (como en decimal) indica una secuencia de valores de ese tipo

Cuantificador universal y existencial en predicados de la claacuteusula where

some $e in path satisfies P

every $e in path satisfies P

XQuery tambieacuten soporta claacuteusulas If-then-else

for $a in banco-1clientewhere some $c in $acuenta satisfies [balancegt400]returnltclientegt $a ltclientegt

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 72: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

Producto(idp nombrep fabricante precio)

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SELECT xnombrep xprecioFROM Producto xORDER BY xprecio

SQL FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

XQuery

Buscar todos los nombres de producto y precios ordenados por precio

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 73: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Resultado XQuery paraResultado XQuery para

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogt

FOR $x$x in doc(ldquodbxmlrdquo)dbdbProductoProductorowrowORDER BY $x$xpreciopreciotext()RETURN ltresultadoresultadogt $xnombrepnombrep $xprecioprecio ltresultadoresultadogtXQuery

Buscar todos los nombres de producto y precios ordenados por precio

ltresultadogtltresultadogt ltnombrepgt ltnombrepgt abc ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 7 ltpreciogt ltpreciogtltresultadogtltresultadogtltresultadogtltresultadogt ltnombrepgt ltnombrepgt def ltnombrepgt ltnombrepgt ltpreciogt ltpreciogt 12 ltpreciogt ltpreciogtltresultadogtltresultadogt

Notar que esto no es undocumento bien formado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 74: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Documento bien formado para el ejemplo anteriorDocumento bien formado para el ejemplo anterior

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt for $x in doc(ldquodbxmlrdquo)dbProductorow $x in doc(ldquodbxmlrdquo)dbProductorow order by $xpreciotext() order by $xpreciotext() return ltresultadogt return ltresultadogt $xnombrep $xprecio $xnombrep $xprecio ltresultadogt ltresultadogt ltmiconsultagt

ltmiconsultagt ltresultadogt ltnombrepgt abc ltnombrepgt ltpreciogt 7 ltpreciogt ltresultadogt ltresultadogt ltnombrepgt def ltnombrepgt ltpreciogt 12 ltpreciogt ltresultadogt

ltmiconsultagt

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 75: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Compantildeias con al menos 30 productos y el precio promedio

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

SELECT ynombre avg(xprecio)FROM Producto x Compantildeia yWHERE xfabricante=yidcGROUP BY yidceHAVING count() gt 30

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

FOR $r$r in doc(ldquodbxmlrdquo)dbdb $y$y in $r$rCompantildeiaCompantildeiarowrowLET $p$p = $r$rProductoProductororow[fabricantefabricantetext()=$y$yidcidctext()]WHERE countcount($p$p) gt 30RETURN lttheCompanygt ltcompanyNamegt $y$ynombrenombretext() ltcompanyNamegt ltavgPricegt avgavg($p$ppreciopreciotext()) ltavgPricegt lttheCompanygt

collection

element

SQL y XQuery ldquolado a ladordquoSQL y XQuery ldquolado a ladordquo

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 76: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

AlmaceAlmacenamnamiento de datos XMLiento de datos XML Almacenes no relacionales

Archivos planos Dado que XML es un formato de archivo es natural almacenar

datos XML como un archivo plano Amplia disponibilidad de herramientas para el acceso y consulta a

archivos XML puede ser suficiente para algunas aplicaciones Presentan los problemas asociados a la gestioacuten de ficheros falta

de concurrencia comprobaciones de integridad atomicidad recuperacioacuten seguridad hellip

Base de Datos XML (pocos sistemas a nivel comercial) Construidas especiacuteficamente para almacenar datos XML soportan

consultas declarativas Usan XML como Modelo de almacenamiento Definen un modelo de datos loacutegico (como DOM) para la estructura

jeraacuterquica de los documentos xml Se almacenan de alguna de las siguientes formas

ndash Traduciendo el DOM a tablas relacionalesndash Traduciendo el DOM a objetos en una BDOOndash Utilizando un almaceacuten creado especialmente con esta finalidad

Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 77: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Ventajas

DBMSs maduros y ampliamente usados Posibilidad de utilizacioacuten desde aplicaciones existentes

Desventajas

Sobrecarga en la traduccioacuten de datos y en las consultas

Si XML no se genera a partir de un esquema relacional la transformacioacuten no es tan sencilla Se producen problemas en la conversioacuten especialmente con

ndash Elementos anidadosndash Elementos que se repiten (atributos multivaluados)

Hay tres alternativas de almacenamientoRepresentacioacuten de XML como StringRepresentacioacuten de XML como String Representacioacuten de XML como aacuterbolRepresentacioacuten de XML como aacuterbol Mapeo a relacionesMapeo a relaciones

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 78: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Almacenamiento de datos XML en BD RelacionalesAlmacenamiento de datos XML en BD Relacionales

Almacenamiento de XML como String

Se almacena cada elemento hijo del elemento de nivel superior como unatupla aparte con un campo de tipo string de una uacutenica relacioacuten en la BD

Ejemplo utilizar una uacutenica relacioacuten (ELEMENTOS) con un atributo (datos) donde cada tupla almacena un elemento XML en forma de cadena sean esos elementos cuenta cliente o depositante

Mejoras Almacenar cada elemento de nivel superior como una relacioacuten

separada Por ejemplo Tres relaciones cuenta cliente depositante

Indexacioacuten

Valores de subelementosatributos se usan como campos de indexacioacuten para construir iacutendices

Ej Nombre_cliente o nuacutemero_cuenta

Antildeadir atributos a las relaciones que identifiquen cada elemento Algunos sistemas de BD soportan funciones de iacutendices estos sistemas usan el resultado de una funcioacuten como valores de clave

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 79: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Representacioacuten String (Cont)Representacioacuten String (Cont)

Beneficios Pueden almacenarse datos XML auacuten sin DTD

Si los elementos de nivel superior del documento tienen gran nuacutemero de hijos los strings seraacuten pequentildeos en comparacioacuten al tamantildeo del documento Esto permite un acceso maacutes raacutepido a los elementos

individuales

Inconvenientes El SGBD NO conoce el esquema de los datos almacenados por

tanto no es posible consultar los datos directamente

Es necesario analizar las cadenas (parsing) para acceder a los valores dentro de los elementos el anaacutelisis es lento

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 80: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Representacioacuten aacuterbolRepresentacioacuten aacuterbol

Representacioacuten aacuterbol se modelan los datos XML como un aacuterbol y se almacenan usando las relaciones

nodos (id tipo etiqueta valor) hijo (id_hijo id_padre)

Se inserta una tupla en la relacioacuten nodos para cada elemento y atributo con los campos

1048698 Id identificador del elemento o atributo

1048698 Tipo especifica si se trata de un elemento o atributo

1048698 Etiqueta con nombre de la etiqueta del elemento o el nombre del atributo

1048698 Valor es el valor literal (valor texto) del elemento o atributo

La relacioacuten hijo almacena el elemento padre de cada elemento o atributo Se puede agregar un atributo maacutes (posicioacuten) a hijo con el orden de cada hijo

banco (id1)

cliente (id2) cuenta (id 5)

nombre_cliente (id3) nuacutemero_cuenta (id7)

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 81: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Representacioacuten aacuterbolRepresentacioacuten aacuterbol (Cont)(Cont)

Beneficio Pueden almacenarse datos XML auacuten sin DTD

Inconvenientes

Los Datos son fraccionados en muchas piezas incrementando la sobrecarga de espacio

Auacuten las consultas simples requieren un gran nuacutemero de joins lo cual puede resultar muy lento

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 82: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Se crea una relacioacuten para cada tipo de elemento cuyo esquema sea conocido En la relacioacuten se guarda

Un atributo id para almacenar un id uacutenico para cada elemento Todos los atributos del elemento se convierten en atributos de su

relacioacuten

Todos los subelementos que se producen una sola vez se convierten en atributos de la relacioacuten Si el valor del subelemento es texto es almacenado como valor del

atributo en la relacioacuten Para subelementos complejos se almacena el id del subelemento

y el subelemento se almacena en una relacioacuten aparte

Si el subelemento puede aparecer varias veces en el elemento seraacute representado en una tabla separada Similar a la forma en que se manejan los atributos multivaluados

cuando se convierte un diagrama E-R a tablas

Un atributo id_padre para mantener el camino al elemento padre Informacioacuten de posicioacuten (ith hijo) puede ser almacenada tambieacuten

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 83: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Beneficios

Almacenamiento eficiente

Poder realizar consultas en SQL de manera eficiente y despueacutes trasladar los resultados de SQL de vuelta a XML

Inconvenientes

Se necesita conocer DTD o esquema XML

Las sobrecargas por transformacioacuten continuacutean presentes

Procesos de conversioacuten de datos XML a relaciones y viceversaProcesos de conversioacuten de datos XML a relaciones y viceversa Publishing proceso de convertir datos relacionales al formato XML

Shredding proceso de convertir un documento XML en un conjunto de tuplas a ser insertadas en una o maacutes relaciones

Existen DBMSs que brindan publishing and shredding automatizado

Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas ldquoespecialesrdquo de datos e iacutendices para mejorar la eficiencia

Mapeo de datos XML a RelacionesMapeo de datos XML a Relaciones

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 84: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Representacioacuten en BD relacionalRepresentacioacuten en BD relacional

Una BD relacional de una escuela

student

course

enroll

(inscripto)

cno title credit

331 DB 30350 Web 30hellip hellip hellip

id name gpa

001 J oe 30002 Mary 40hellip hellip hellip

id cno

001 331001 350002 331hellip hellip

grade point average

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 85: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Representacioacuten XMLRepresentacioacuten XMLltschoolgt

ltstudent id=ldquo001rdquogt ltnamegt Joe ltnamegt ltgpagt 30 ltgpagt

ltstudentgtltstudent id=ldquo002rdquogt

ltnamegt Mary ltnamegt ltgpagt 40 ltgpagtltstudentgtltcourse cno=ldquo331rdquogt

lttitlegt DB lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltcourse cno=ldquo350rdquogt

lttitlegt Web lttitlegt ltcreditgt 30 ltcreditgtltcoursegtltenrollgt

ltidgt 001 ltidgt ltcnogt 331 ltcnogtltenrollgtltenrollgt

ltidgt 001 ltidgt ltcnogt 350 ltcnogtltenrollgtltenrollgt

ltidgt 002 ltidgt ltcnogt 331 ltcnogtltenrollgt

ltschoolgt

grade point average

inscripto

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 86: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

XXSLSLTT

Un stylesheet guarda opciones de formato para un documento usulmente en forma separada del documento

Ej Una hoja de estilo HTML puede especificar color de la fuente y tamantildeo para encabezados etc

El XML Stylesheet Language (XSL) fue disentildeado originalmente para

generar HTML desde XML

XSLT es un lenguaje de transformacioacuten de propoacutesito general Puede transformar XML a XML y XML a HTML

Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas)

Los Templates combinan seleccioacuten usando XPath con construccioacuten de resultados

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 87: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

XSLT TemplatesXSLT Templates Ejemplo de plantillas XSLT con match y select

ltxsltemplate match=ldquobanco-2clienterdquogt ltxslvalue-of select=ldquonombre_clienterdquogt

ltxsltemplategt ltxsltemplate match=ldquordquogt

El atributo de match de xsltemplate specifica un patroacuten XPath Los elementos del documento XML que ldquohagan matchrdquo con el patroacuten son

procesados con las acciones definidas dentro del elemento xsltemplate xslvalue-of selecciona valores de salida (en este caso nombre_cliente)

Para los elementos que no coinciden con ninguna plantilla

El contenido (Atributos y texto) son emitidos como son

Los Templates son aplicados recursivamente a los subelementos La plantilla ltxsltemplate match=ldquordquogt haraacute match con todos los elementos

que no coincidan con ninguna otra plantilla Cuando se usa esos elementos no generan ninguna salida

Si un elemento ldquohace matchrdquo con varias plantillas soacutelo una de ellas es usada en base a un esquema de prioridad definido por el usuario

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 88: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Creando salidas XMLCreando salidas XML

Cualquier texto o etiqueta en XSL stylesheet que no esteacute en el xsl namespace va a la salida tal cual es

Ej Envolver resultados en nuevos elementos XML

ltxsltemplate match=ldquobanco-2clienterdquogt

ltclientegt

ltxslvalue-of select=ldquonombre_clienterdquogt

ltclientegt

ltxsltemplategt

ltxsltemplate match=ldquordquogt

Salida

ltclientegt Pepe ltclientegt ltclientegt Mary ltclientegt

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57
Page 89: Esquema de un documento XML Los esquemas de BDs restringen que información puede ser almacenada Los documentos XML no requieren tener un esquema asociado

Creando salidas XMLCreando salidas XML (Cont(Cont)) Nota No se puede usar xslvalue-of tag dentro de otra etiqueta

Ej No se puede crear un atributo para ltclientegt en el ejemplo previo usando directamente xslvalue-of

XSLT provee una construccioacuten xslattribute para manejar esta situacioacuten

xslattribute agrega un atributo al elemento precedente

Ej ltclientegt

ltxslattribute name=ldquoid_cliente=rdquogt

ltxslvalue-of select = ldquoid_clienterdquogt

ltxslattributegt

ltclientegt

esto resulta en una salida de la forma

ltcliente id_cliente=ldquohelliprdquogt hellip

xslelement es usado para crear elementos de salida con nombres computados

  • Slide 35
  • Slide 36
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 57