La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


Presentación del tema: "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."— Transcripción de la presentación:

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 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

2 Definición 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 puede/debe tener un elemento Que subelementos pueden/deben 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)

3 Especificación de Elementos en DTD La especificación de un elemento puede contener: Nombres de sub-elementos #PCDATA (Parsed Character Data), i.e., strings de caracteres EMPTY (el elemento no tiene contenido o subelementos) ANY (el contenido puede ser cq. Mezcla de PCDATA y elementos) Expresiones regulares Ejemplo Ejemplo del uso de expresiones regulares A continuación veremos esto más formalmente:

4 Definicion del tipo de un elemento Un elemento E se declara como: Donde P es una expresión regular, i.e., P ::= EMPTY | ANY | #PCDATA | E | P1, P2 | P1 | P2 | P? | P+ | P* E: tipo elemento P1, P2: concatenación P1 | P2: disjunción P?: opcional P+: una o más ocurrencias P*: cero o más ocurrencias (clausura de Kleene) Nota: Clausura de Kleene {'a', 'b', 'c'}* = {ε, "a", "b", "c", "aa", "ab", "ac", "ba", "bb", "bc",...}

5 Notación DTD… | - alternativas. ( e1 | e2 ) especifica que puede aparecer en el documento e1 o e2 (disjunción) o más ocurrencias. Un + siguiendo al nombre de un elemento significa que el elemento puede aparecer una o más veces en el documento (elemento multivaluado ). * - cero o más ocurrencias. Un * siguiendo al nombre de un elemento significa que el elemento puede aparecer cero o más veces en el documento (elemento opcionalmente multivaluado). ? – cero o una ocurrencia. Un ? 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 símbolos debe aparecer sólo una vez en el documento (single-valued element). El tipo de un elemento es especificado entre paréntesis siguiendo al elemento. Si el paréntesis incluye nombres de otros elementos estos serán hijos en la estructura de árbol. Si los paréntesis incluyen la palabra clave #PCDATA el elemento es un nodo hoja. Los paréntesis pueden anidarse al especificar elementos.

6 Expresiones Regulares: ejemplos nombre, dir*, nombre dir Un círculo doble denota un estado admisible

7 Otro ejemplo nombre,dir*,(tel | fax)*, * nombre dir tel fax

8 Algunas cosas son difíciles de especificar Cada empleado debe contener elementos nombre, edad y dni en algun orden: Suponga que hay muchos más elementos involucrados! Existen n! ordenamientos diferentes para n elementos

9 Ejemplo banco: datos XML A-101 caucete Pérez el sauce 123 angaco.... A-101 Pérez....

10 Ejemplo Banco: DTD volver

11 Ejemplo libreta de Direcciones: datos XML.... Juan Perez Ing. J. Perez calle Las Flores calle Las Rosas (321) (321) Teléfonos y faxes mezclados Tantas como se necesiten Tantas líneas de dirección como sean necesarias A lo sumo una presentación Exactamente un nombre

12 El resto del documento XML para libreta de direcciones es: Juan Perez Ing. J. Perez ….

13 Ej. Libreta direcciones: especificando la estructura c/ DTD nombre para especificar 1 elemento nombre presentación? para especificar un elemento presentación opcional (0o1) Nombre, presentación? para especificar 1 nombre seguido de una presentación opcional dirección*para especificar 0 o más lineas de dirección tel | faxun elemento tel o un elemento fax (tel | fax)* 0 o más repeticiones de tel o fax contenido mixto contenido mixto *0 or más elementos De modo que la estructura completa para persona está dada por la expresión regular: nombre, presentación?, dirección*, (tel | fax)*, *

14 Definición de contenido mixto (mixed content ) Se describe mediante un grupo OR repetible (#PCDATA | nombre-de –elemento | …)* Dentro del grupo no hay expresiones regulares, sólo nombres de elementos #PCDATA debe ir primero seguido de 0 o más nombres de elementos, separados por | El grupo puede ser repetido 0 o más veces volver

15 Documento XML con DTD interno para libreta de direcciones Interno significa que el DTD y el documento XML están en el mismo archivo La sintaxis de un DTD no es sintaxis XML Ampliaremos a continuación…

16 Asociando 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 están en archivos separados, un DTD externo puede residir: En el sistema de archivos local (en el que está el documento) En un sistema de archivos remoto Etiqueta de encabezamiento Etiqueta de encabezamiento Standalone=yes significa que se trata de un DTD externo Si se omite el atributo de codificación el procesador usará UTF-8 (default) Nota: UTF-8 (8-bit Unicode Transformation Format) es un formato de codificación de caracteres Unicode de longitud variable

17 Con DTD interno: … ]>... Con DTD en el sistema de archivos local: Con DTD en un sistema de archivos remoto: Asociando un DTD con un documento...

18 Especificación de Atributos en DTD Especificación de Atributos: para c/atributo de un elemento especificar: Nombre Tipo de atributo CDATA ID (identificador) o IDREF (ID reference) o IDREFS (múltiples IDREFs) – luego ampliaremos Alguna de las siguientes cláusulas #REQUIRED: significa que el atributo debe ser incluido en el elemento #IMPLIED: significa que el atributo es opcional en el elemento #FIXED valor: el valor entre comillas es el único posible para el atributo valor :Valor por defecto que toma el atributo si no se dá ninguno Ejemplos elemento valor x defecto tipo atributo

19 IDs 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 único en todo el documento) Así 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 más) valores ID. Cada uno de los IDREFS debe contener el valor de un ID de otro elemento del mismo documento

20 Ejemplo banco-2: datos XML con ID e IDREF número_cuenta=A-401 propietarios=C100 C102 central 500 ….. id_cliente=C100 cuentas=A-401 Pepe camino San Juan id_cliente=C102 cuentas=A-401 A402 Mary Las piedras San Juan ….. Notar que, a diferencia del ej. Banco, aquí no se usa un elemento depositante. Lo mismo ocurre si usamos anidamiento (ver a cont. ejemplo Banco-1)Banco-1

21 Ejemplo banco-1: datos XML con anidamiento Huerta Piedras 2020 San Juan A-102 jachal 400 …......

22 Ejemplo Banco-2: DTD DTD del Banco con atributos ID e IDREF … faltan declaraciones para sucursal, balance, nombre_cliente, calle_cliente y ciudad_cliente ]> ir DTD del ejemplo Banco

23 DTD: OtroEjemplo…

24 DTDs Recursivos el Padre... ]> Cual es el problema con esto? Cada persona deberá tener padre y madre. Esto lleva a tener infinitos datos o a que una persona sea descendiente de si mismo.

25 DTDs Recursivos, cont. Padre... ]> Que problema subsiste todavía? No podemos distinguir entre padre y madre. Por ejemplo: Si una persona tiene solamente padre, ¿ como saber que se trata del padre y no de la madre?

26 Solución usando atributos ID e IDREF ]> Los IDREFs no tienen tipo Los IDREFs no tienen tipo Los atributos madre y padre son referencias a IDs de otros elementos Sin embargo no serán obligatoriamente elementos persona ! El atributo madre no necesariamente será una referencia a una persona del sexo femenino, y viceversa para el padre.

27 Datos XML compatibles con el DTD anterior Lisa Simpson Bart Simpson Marge Simpson Homero Simpson

28 Una especificación alternativa para el DTD del ejemplo anterior...

29 Marge Simpson Homero Simpson Bart Simpson Lisa Simpson Datos XML compatibles con el DTD anterior ……

30 Limitaciones 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 sólo una vez IDs e IDREFs son untyped El atributo propietario de una cuenta puede contener una referencia a otra cuenta, lo cual no tiene sentido El atributo propietario debería estar restringido para hacer referencia sólo a elementos cliente

31 Espacio de nombres Los datos XML tienen que ser intercambiados entre organizaciones Un mismo nombre de tag puede tener diferentes significados en diferentes organizaciones, causando confusión sobre documentos intercambiados Especificar un string único como nombre de un elemento evita confusiones La mejor solución: usar nombre-único:nombre-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 xmlns: … Downtown Brooklyn … Veamos esto en más detalle... o alias o prefijo

32 Espacio de nombres n Otro ejemplo de nombres que pueden generar confusión: Avd. Diagonal 8 Barcelona España Los dos documentos XML anteriores tienen en común el elemento direccion. Son dos vocabularios diferentes pero puede ser que en algún momento tengamos que integrarlos en un mismo documento XML. Supongamos que juntos ambos documentos nos ofrecen información sobre la localización de una empresa: su dirección física y su dirección en Internet. Está claro que el elemento dirección va a provocar problemas. Una posible solución es ponerlo de la siguiente manera:

33 Espacio de nombres Ej: localización de una empresa con dirección física y dirección en Internet Palotes S.A. Avd. Diagonal 8 Barcelona España

34 Espacio de Nombres capital de un pais y capital de una transacción tienen diferentes significados y espacios semánticos (término geográfico vs. término económico-financiero). Los espacios de nombres son una solución a los problemas de homonímia. Permiten eliminar ambigüedades calificando los nombres que se usan en los documentos XML. n Veamos un ejemplo en que, en un mismo documento, aparecerían nombres idénticos (p.e. "capital"), para elementos diferentes: Madrid n Los espacios de nombres permiten combinar en un mismo documento varios vocabularios

35 Solucion1: Recurrir a una autoridad mundial que asigne nombres…. complicado!!!! Solucion2: Otra solución es utilizar un mecanismo ya existente, por eso se pensó en los URIs (Uniform Resource Identifiers), si bien un URI es una cadena de caracteres que identifica unívocamente un recurso en una red o sistema, aquí no se trata de utilizar un URI como enlace, ni tiene por qué tener contenido, los URI sólo se utilizan para que el nombre sea único. Ejemplo:http://www.hipertexto.info n Aquí definimos un espacio de nombres XML como: una colección 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 añadir un atributo a la definición de dicho elemento, donde el nombre del atributo sea xmlns y el valor puede ser una cadena cualquiera, aunque por convención suelen ser URLs. Espacio de Nombres

36 Solucion2… Asociamos entonces a cada etiqueta un espacio de nombres. Para el ejemplo visto usaremos: y Asi, sin ambiguedades, el ejemplo queda:... Madrid Espacio de Nombres Aquí no se usaron alias o prefijos

37 Solucion3: para no escribir toda la URI, se usan alias o prefijos más cortos. xmlns:alias define un alias en el ámbito de un elemento Apliquemos esto al ejemplo: Madrid n 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 Nombres bolsa y geo son los alias usados en este ejemplo Se pueden declarar varios espacios de nombres como atributos de un único elemento (en este caso del elemento inversiones)

38 Solucion3… Idem anterior pero con asignación dinámica, esto es, se van asociando espacios de nombre a los elementos según van apareciendo: Madrid

39 Variante de la solución 3: usar un espacio de nombres por defecto Madrid En este caso las etiquetas sin prefijo corresponden al espacio de nombres por defecto que es Un espacio de nombres por defecto, definido en la etiqueta de inicio de un elemento XML, se aplica a todos elementos sin prefijo del ámbito del elemento, pero no a los atributos. Espacio de Nombres No tiene prefijo

40 Resumiendo: n Los espacios de nombres se crearon para evitar las colisiones en los diferentes módulos de software capaces de reconocer las marcaciones del lenguaje XML. n También 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. n 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. n Otra motivación para esta modularidad es que, si se dispone de un conjunto de marcaciones, para el que ya existe software disponible, es mejor la reutilización de estas marcaciones que inventar nuevas. Así, se considera que las construcciones de ciertos documentos deben usar nombres universales, cuyo ámbito se extienda más allá del propio documento. Espacio de Nombres

41 Resumiendo… n Una de las pruebas del éxito del XML es la gran cantidad de vocabularios XML (DTDs) que están 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 esté definido, es una buena práctica usar un DTD o un esquema XML para definir la estructura de datos en la ubicación URI del espacio de nombres. n Por ejemplo, es posible que estemos escribendo un artículo científico en formato XML y que tengamos la necesidad de incorporar fórmulas matemáticas. Podemos perfectamente desarrollar nuestras propias etiquetas, pero ¿por qué no utilizar las que nos proporciona el vocabulario MathML ? Espacio de Nombres

42 Los espacios de nombre nacieron con posterioridad a los DTDs. Por eso para validar un documento que usa espacio de nombres es necesario definirlo en el DTD. Por ejemplo: ]> Espacios de Nombres y DTDs Madrid Documento XML

43 XML Schema vs DTDs Un esquema XML es más sofisticado que un DTD y no tiene sus limitaciones; soporta: Built-in types E.g. integer, string, etc. También soporta restricciones de valores min/max 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 foránea, herencia, etc. A diferencia de los DTDs, los esquemas usan la misma sintaxis de los documentos XML Mecanismos para integrar espacios de nombres Representación más standard pero más complicada

44 XML Schema vs DTDs Al igual que en un DTD, el propósito de un esquema XML es definir los bloques de construcción válidos 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 número de elementos hijo Si un elemento es vacío 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 más 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 múltiples esquemas en un documento, etc.

45 XML Schema: otras características... Elementos y atributos son tipados 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 anónimos Un esquema es definido en un documento esquema-XML

46 Alice Smith 123 Maple Street Mill Valley CA Robert Smith 8 Oak Avenue Old Town PA Hurry, my lawn is going wild! Lawnmower Confirm this is electric Baby Monitor documento para el ejemplo orden de compra en archivo po.xml

47 Purchase order schema for Example.com. Copyright 2000 Example.com. All rights reserved. documento-esquema para el ejemplo anterios en archivopo.xsd xmlschemedocument( cualquier otro prefijo para el espacio de nombres puede ser usado)

48

49 espacio de nombres del esquema annotation... brinda información a lectores humanos: Purchase order schema for Example.com. Copyright 2000 Example.com. All rights reserved. ejemplo de tipo complejo: Este es un elemento XML con 2 subelementos ( sequence y attribute ). Todos los elementos en el documento que sean del tipo USAddress debe satisfacer esta declaración de tipo. deben tener 5 subelementos en el orden especificado deben tener un atributo country el tipo NMTOKEN sólo puede contener letras, dígitos, punto [. ], guión [ - ], subrayado [ _ ] y dos puntos [ : ]. Los del tipo NMTOKENS pueden contener los mismos caracteres que NMTOKEN más espacios en blanco.

50 Tipos simples (Built-in ) XML simple types: string, byte, integer, long, decimal, float, double, boolean, dateTime, ID, IDREF, IDREFS, anyType, … anyType es el tipo universal Restricciones sobre los tipos simples El elemento simpleType tiene un sub-elemento restriction con dos subelementos llamados facetas o facets

51 Ejemplo banco: datos XML A-101 caucete Pérez el sauce 123 angaco.... A-101 Pérez.... volver

52 Documento de un esquema XML: ejemplo banco ….. falta definición de cliente y depositante ….

53 elección del prefijo xs: cualquier otro prefijo para el espacio de nombres pudo ser elegido El elemento banco es del tipo TipoBanco, que es definido separadamente xs:complexType es usado después para crear el tipo complejoTipoBanco (ver ) El elemento cuenta tiene su tipo (complex) definido en linea Documento de un esquema XML: ejemplo banco---

54 Mas características de XML Schema Etiqueta attribute: para especificar atributos xsd:attribute name="country" type="xsd:NMTOKEN"/> Agregar required significa que un valor debe ser especificado. key Restricción key: en el ejemplo banco, los números de cuenta son la clave para identificar a los elementos cuenta: clave_cuenta * Puedo hacer una restricción clave_cliente para usar nombre_cliente como clave de cliente keyref Restricción keyref: clave foránea para cuenta en depositante: clave_cuenta * Puedo hacer una restricción similar con refer=clave_cliente en la clave foránea para cliente en depositante.

55 Consultas y Transformación de datos XML Traslaciónde información Traslación de información de un esquema XML a otro Consulta Consulta de datos XML (Querying) Los dos temas están relacionados y se manejan con las mismas herramientas Lenguajes estandar de Consultas/Transformación de datos XML XPath Lenguaje simple consistente en expresiones de camino XQuery XML query language lenguaje de propósito general para XML XSLT Lenguaje diseñado para transformar documentos XML a XML y XML a HTML

56 Árboles como modelo de datos XML Los lenguajes de consulta y transformación están basados en el modelo árbol de datos XML Un documento XML es modelado como un árbol, 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 están 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 raíz) El nodo raíz tiene un sólo hijo que es el elemento raíz del documento

57 Modelo de Datos Raiz CódigoCr Juan Perez Esp1 … Raiz Estudiantes Semestre Tipos de Nodos Documento Elemento Texto atributo Estudiantes Curso Estudiante Nombre NpilaApell Curso StudId CódigoCr dr Juan Perez Esp1 Semestre ……… …

58 XQuery Estandarizado por World Wide Web Consortium (W3C) Tomado de un libro de texto del La versión final del estandar puede diferir en algunos aspectos menores. XQuery se deriva del lenguaje Quilt, el cual a su vez toma características de SQL, XQL and XML-QL XQuery usa la sintaxis: f or … l et … w here … o rder by … r eturn … 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)

59 Breve referencia a Xpath Expresión: coincide (matches) con: bibun elemento bib *cualquier elemento /el elemento raiz /bibun elemento bib bajo la raiz bib/paperun elemento paper en bib bib//paperun elemento paper en bib, a cq profundidad //paperun elemento paper a cq profundidad paper|bookun elemento paper o un elemento atributo price atributo price en book, en bib

60 Sintaxis FLWOR en XQuery La cláusula For usa expresiones XPath, y la variable en la cláusula for asume valores del conjunto retornado por XPath Expresiones simples en XQuery Encontrar todas las cuentas con balance > 400, con cada resultado encerrado entre etiquetas.. for $x in /banco/cuenta let $nucta:= $x where $x /balance > 400 return { $nucta } Los Items en la cláusula return son texto XML a menos que estén 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 /banco/cuenta[balance>400] return { }

61 XQuery : Constructores de elementos XQuery permite trabajar directamente con estructuras XML. Los constructores de elementos permiten embeber estructuras XML directamente en la programación con XQuery. Por ejemplo, lo siguiente es perfectamente válido en una expresión XQuery: 47 tsmith expresiones XQuery embebidas colocando dicha expresión entre llaves Sin embargo, para poder construir estructuras XML de manera dinámica es necesario usar expresiones XQuery embebidas en el constructor de un elemento, colocando dicha expresión entre llaves. Esta es la forma más frecuente en que se usan los constructores de elementos en la cláusula Return de una expresión FLWOR. { $i } { $u } { $a } Cualquier expresión XQuery válida puede ser embebida, lo que significa que los constructores de elementos pueden hacerse tan complejos como se requiera.

62 Addison-Wesley Serge Abiteboul Addison-Wesley Serge Abiteboul Rick Hull Victor Vianu Foundations of Databases 1995 Freeman Jeffrey D. Ullman Principles of Database and Knowledge Base Systems 1998 Rick Hull Victor Vianu Foundations of Databases 1995 Freeman Jeffrey D. Ullman Principles of Database and Knowledge Base Systems 1998 Addison-Wesley Serge Abiteboul Addison-Wesley Serge Abiteboul Rick Hull Victor Vianu Foundations of Databases 1995 Freeman Jeffrey D. Ullman Principles of Database and Knowledge Base Systems 1998 Rick Hull Victor Vianu Foundations of Databases 1995 Freeman Jeffrey D. Ullman Principles of Database and Knowledge Base Systems 1998 Documento a ser consultado luego con Xquery:

63 $x bibbook libro título $xtitletítulo año $xyear año libro FOR $x IN doc("bib.xml")/bib/book RETURN { $x/title/text() } { $x/year/text() } Xquery En Xquery se puede construir el resultado XML como se desee: libro títuloFoundations of Databasestítulo 1995 libro Foundations of Databases 1995 libro títuloPrinciples of Database and Knowledge Base Systemstítulo año1998año libro Principles of Database and Knowledge Base Systems Buscar todos los títulos de libros y el año en que fueron publicados:

64 Xquery: Queries Anidados Para cada autor de un libro de la editorial Morgan Kaufmann, listar todos los otros libros de ese autor: $bbib $$bbookpublisherauthor FOR $b IN doc(bib.xml)/bib, $a IN $b/book[publisher /text()=Morgan Kaufmann]/author resultado RETURN $a, { $a, $t$bbookauthor$atitle FOR $t IN $b/book[author/text()=$a/text()]/title $t RETURN $t } resultado Jones abc Smith ghi Jones abc Smith ghi XML

65 Xquery: Queries Anidados El siguiente query convierte datos de la estructura chata de banco (donde cuenta, cliente y depositante están al mismo nivel) a la estructura anidada de banco-1 (ver diapositiva siguiente)banco { for $c in /banco/cliente return { $c/* } { for $d in /banco/depositante[nombre_cliente = $c/nombre_cliente], $a in /banco/cuenta[número_cuenta=$d/número_cuenta] return $a } } $c/* denota todos los hijos del nodo $c, sin etiquetas de nivel superior $c/text() da el contenido texto de un elemento sin etiquetas o subelementos

66 Ejemplo banco-1: datos XML con anidamiento Huerta Piedras 2020 San Juan A-102 jachal 400 …......

67 Xquery: Funciones de Agregación (Aggregate function) n Toman una colección de valores y entregan un resultado escalar Buscar todos los libros con más de 3 autores: count count = función para contar avg sum distinct-values avg = para calcular promedio sum = para calcular la suma distinct-values = para eliminar duplicados $xbibbook count($xauthor $x FOR $x IN doc("bib.xml")/bib/book WHERE count($x/author)>3 RETURN $x distinct-values for $a in distinct-values(doc("bib.xml")//author) return { $a } distinct-values for $a in distinct-values(doc("bib.xml")//author) return { $a }

68 Buscar libros cuyos precios sean mayores que el promedio: { for $b in doc("bib.xml")/bib let let $a := avg($b/book/price/text()) for for $x in $b/book where ($x/price/text() > $a) return $x } { for $b in doc("bib.xml")/bib let let $a := avg($b/book/price/text()) for for $x in $b/book where ($x/price/text() > $a) return $x } LET LET liga una variable a un (1) valor; FOR FOR itera una variable sobre una lista de valores Xquery: Funciones de Agregación

69 Xquery: FOR v.s. LET $xbibbook FOR $x IN /bib/book resultado$xresultado RETURN { $x } $xbibbook FOR $x IN /bib/book resultado$xresultado RETURN { $x } Liga con variables nodo iteración $xbibbook LET $x := /bib/book resultado$xresultado RETURN { $x } $xbibbook LET $x := /bib/book resultado$xresultado RETURN { $x } Liga con 1 variable de colección

70 Xquery: Joins Los Joins son especificados de manera similar a SQL Para el ejemplo banco, obtener información de clientes y sus cuentas for $a in /banco/cuenta, $c in /banco/cliente, $d in /banco/depositante where $a/número_cuenta = $d/número_cuenta and $c/nombre_cliente = $d/nombre_cliente return { $c $a } La misma consulta puede ser expresada con la restricción expresada como en XPath: for $a in /banco/cuenta, $c in /banco/cliente, $d in /banco/depositante[ número_cuenta = $a/número_cuenta and nombre_cliente = $c/nombre_cliente ] return { $c $a } Elem.de depositante

71 Ordenamiento en XQuery La cláusula order by puede ser usada al final de cualquier expresión. Por ejemplo para retornar clientes ordenados por nombre for $c in /banco/cliente order by $c/nombre_cliente return { $c/* } Para ordenar en múltiples niveles (por ejemplo ordenar por nombre_cliente, y por número_cuenta, dentro de cada cliente, al convertir datos de banco a banco-1) { for $c in /banco/cliente order by $c/nombre_cliente return { $c/* } { for $d in banco/depositante[nombre_cliente=$c/nombre_cliente], $a in banco/cuenta[número_cuenta=$d/número_cuenta] } order by $a/número_cuenta return $a/* } } Toda los datos XML de los clientes ordenada por nombre de cliente

72 Funciones y otras características de XQuery Funciones definidas por el usuario con el sistema de tipos de XMLSchema ejemplo: función que retorna los balances de las cuentas de un cliente function balances(xs:string $c) returns list(xs:decimal*) { for $d in /banco/depositante[nombre_cliente= $c], $a in /banco/cuenta[numero_cuenta= $d/numero_cuenta] return $a/balance } Los tipos son opcionales para los parámetros y valores de retorno El * (como en decimal*) indica una secuencia de valores de ese tipo Cuantificador universal y existencial en predicados de la cláusula where some $e in path satisfies P every $e in path satisfies P XQuery también soporta cláusulas If-then-else for $a in /banco-1/cliente where some $c in $a/cuenta satisfies [balance>400] return $a

73 SQL y XQuery lado a lado Producto(idp, nombrep, fabricante, precio) SELECT x.nombrep, x.precio FROM Producto x ORDER BY x.precio SQL $xdbProductorow $xprecio resultado nombrepprecio resultado FOR $x in doc(db.xml)/db/Producto/row ORDER BY $x/precio/text() RETURN { $x/nombrep, $x/precio } XQuery Buscar todos los nombres de producto y precios, ordenados por precio:

74 Resultado XQuery para.... $xdbProductorow $xprecio resultado nombrepprecio resultado FOR $x in doc(db.xml)/db/Producto/row ORDER BY $x/precio/text() RETURN { $x/nombrep, $x/precio } XQuery Buscar todos los nombres de producto y precios, ordenados por precio: abc 7 def Notar que esto no es un documento bien formado!

75 Documento bien formado para el ejemplo anterior: $x in doc(db.xml)/db/Producto/row order by $x/precio/text() return { $x/nombrep, $x/precio } { for $x in doc(db.xml)/db/Producto/row order by $x/precio/text() return { $x/nombrep, $x/precio } } $x in doc(db.xml)/db/Producto/row order by $x/precio/text() return { $x/nombrep, $x/precio } { for $x in doc(db.xml)/db/Producto/row order by $x/precio/text() return { $x/nombrep, $x/precio } } abc 7 def

76 Compañias con al menos 30 productos, y el precio promedio: SELECT y.nombre, avg(x.precio) FROM Producto x, Compañia y WHERE x.fabricante=y.idc GROUP BY y.idce HAVING count(*) > 30 $rdb $y$r/Compañiarow $p$rProductorofabricante$yidc count$p $ynombre avg$pprecio FOR $r in doc(db.xml)/db, $y in $r/Compañia/row LET $p := $r/Producto/row[fabricante/text()=$y/idc/text()] WHERE count($p) > 30 RETURN { $y/nombre/text() } avg($p/precio/text()) collection element SQL y XQuery lado a lado

77 Almacenamiento 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 gestión de ficheros: falta de concurrencia, comprobaciones de integridad, atomicidad, recuperación, seguridad … Base de Datos XML (pocos sistemas a nivel comercial) Construidas específicamente para almacenar datos XML, soportan consultas declarativas. Usan XML como Modelo de almacenamiento Definen un modelo de datos lógico (como DOM) para la estructura jerárquica de los documentos xml. Se almacenan de alguna de las siguientes formas: –Traduciendo el DOM a tablas relacionales –Traduciendo el DOM a objetos en una BDOO –Utilizando un almacén creado especialmente con esta finalidad. Bases de datos Relacionales Los datos deben ser traducidos a la forma relacional

78 Almacenamiento de datos XML en BD Relacionales l Ventajas: DBMSs maduros y ampliamente usados. Posibilidad de utilización desde aplicaciones existentes. l Desventajas: Sobrecarga en la traducción de datos y en las consultas. Si XML no se genera a partir de un esquema relacional, la transformación no es tan sencilla. Se producen problemas en la conversión, especialmente con: –Elementos anidados –Elementos que se repiten (atributos multivaluados) l Hay tres alternativas de almacenamiento: Representación de XML como String Representación de XML como String Representación de XML como árbol Representación de XML como árbol Mapeo a relaciones Mapeo a relaciones

79 Almacenamiento de datos XML en BD Relacionales Almacenamiento de XML como String n Se almacena cada elemento hijo del elemento de nivel superior como una tupla aparte, con un campo de tipo string, de una única relación en la BD. Ejemplo: u tilizar una única relación (ELEMENTOS) con un atributo (datos), donde cada tupla almacena un elemento XML en forma de cadena, sean esos elementos cuenta, cliente o depositante. n Mejoras: Almacenar cada elemento de nivel superior como una relación separada. Por ejemplo: Tres relaciones: cuenta, cliente, depositante. Indexación: Valores de subelementos/atributos se usan como campos de indexación para construir índices Ej. Nombre_cliente o número_cuenta Añadir atributos a las relaciones que identifiquen cada elemento. Algunos sistemas de BD soportan funciones de índices, estos sistemas usan el resultado de una función como valores de clave.

80 Representación String (Cont.) n Beneficios: Pueden almacenarse datos XML aún sin DTD Si los elementos de nivel superior del documento tienen gran número de hijos, los strings serán pequeños en comparación al tamaño del documento Esto permite un acceso más rápido a los elementos individuales. n 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 análisis es lento.

81 Representación árbol n Representación árbol: se modelan los datos XML como un árbol y se almacenan usando las relaciones: nodos (id, tipo, etiqueta, valor) hijo (id_hijo, id_padre) Se inserta una tupla en la relación nodos para cada elemento y atributo, con los campos: Id: identificador del elemento o atributo Tipo: especifica si se trata de un elemento o atributo Etiqueta: con nombre de la etiqueta del elemento o el nombre del atributo Valor: es el valor literal (valor texto) del elemento o atributo La relación hijo almacena el elemento padre de cada elemento o atributo. Se puede agregar un atributo más (posición) a hijo, con el orden de cada hijo banco (id:1) cliente (id:2) cuenta (id: 5) nombre_cliente (id:3)número_cuenta (id:7)

82 Representación árbol (Cont.) Beneficio: Pueden almacenarse datos XML aún sin DTD Inconvenientes: Los Datos son fraccionados en muchas piezas, incrementando la sobrecarga de espacio. Aún las consultas simples requieren un gran número de joins, lo cual puede resultar muy lento.

83 Mapeo de datos XML a Relaciones n Se crea una relación para cada tipo de elemento cuyo esquema sea conocido. En la relación se guarda: l Un atributo id para almacenar un id único para cada elemento l Todos los atributos del elemento se convierten en atributos de su relación. l Todos los subelementos que se producen una sola vez se convierten en atributos de la relación: Si el valor del subelemento es texto, es almacenado como valor del atributo en la relación. Para subelementos complejos, se almacena el id del subelemento, y el subelemento se almacena en una relación aparte. l Si el subelemento puede aparecer varias veces en el elemento, será 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. l Un atributo id_padre para mantener el camino al elemento padre Información de posición (i th hijo) puede ser almacenada también

84 Beneficios: Almacenamiento eficiente. Poder realizar consultas en SQL, de manera eficiente, y después trasladar los resultados de SQL de vuelta a XML. Inconvenientes: Se necesita conocer DTD o esquema XML. Las sobrecargas por transformación continúan presentes. Procesos de conversión 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 más relaciones. Existen DBMSs que brindan publishing and shredding automatizado Algunos sistemas ofrecen almacenamiento nativo de datos XML y agregan estructuras internas especiales de datos e índices para mejorar la eficiencia. Mapeo de datos XML a Relaciones...

85 Representación en BD relacional Una BD relacional de una escuela: student: course: enroll: (inscripto) grade point average

86 Representación XML Joe 3.0 Mary 4.0 DB 3.0 Web grade point average inscripto

87 XSLT 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 tamaño para encabezados, etc. El XML Stylesheet Language (XSL) fue diseñado originalmente para generar HTML desde XML XSLT es un lenguaje de transformación de propósito general Puede transformar XML a XML, y XML a HTML Las transformaciones XSLT son expresadas usando reglas llamadas templates (plantillas) Los Templates combinan selección usando XPath con construcción de resultados

88 XSLT Templates Ejemplo de plantillas XSLT con match y select El atributo de match de xsl:template specifica un patrón XPath Los elementos del documento XML que hagan match con el patrón son procesados con las acciones definidas dentro del elemento xsl:template xsl:value-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 hará match con todos los elementos que no coincidan con ninguna otra plantilla Cuando se usa, esos elementos no generan ninguna salida. Si un elemento hace match con varias plantillas, sólo una de ellas es usada en base a un esquema de prioridad definido por el usuario

89 Creando salidas XML Cualquier texto o etiqueta en XSL stylesheet que no esté en el xsl namespace va a la salida tal cual es Ej. Envolver resultados en nuevos elementos XML. Salida: Pepe Mary

90 Creando salidas XML (Cont.) Nota: No se puede usar xsl:value-of tag dentro de otra etiqueta Ej. No se puede crear un atributo para en el ejemplo previo usando directamente xsl:value-of... XSLT provee una construcción xsl:attribute para manejar esta situación xsl:attribute agrega un atributo al elemento precedente Ej. esto resulta en una salida de la forma …. xsl:element es usado para crear elementos de salida con nombres computados


Descargar ppt "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."

Presentaciones similares


Anuncios Google