complementos de xml - famaf.unc.edu.argonzalez/bd2009/complementos-de-… · •valid xml involves...

80
Complementos de XML Bases de Datos 2009

Upload: others

Post on 15-Jun-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

Complementos de XML

Bases de Datos 2009

Page 2: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

Introduction

• Motivation: sharing of documents among systems and databases.

• Well-Formed XML allows you to invent your own tags.

– Similar to labels in semistructured data.

• Valid XML involves a DTD (Document Type Definition), a grammar for tags.

Page 3: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XML bien formado• Start the document with a declaration, surrounded by

<?xml … ?> .• Si se incluye una declaración XML se debe incluir la versión,

pero los atributos encoding y standalone son opcionales. Los atributos version, encoding y standalone deben estar en ese orden.

• Normal declaration is:<?xml version = “1.0” standalone = “yes” ?>

– “Standalone” = “no DTD provided.”

• Si el atributo standalone es incluido en la declaración XML,debe ser fijado en yes o no.

• Yes especifica que el documento existe enteramente en símismo sin depender de otros archivos.

• No indica que el documento puede depender en un DTDexterno.

• XML tags are case sensitive.

Page 4: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XML bien formado

• El orden en el cual los atributos son incluidos en un elemento no es considerado relevante.

• Como consecuencia si si hay información en un documentoXML que debe venir en un cierto orden se debe poner esainforma-ción en elementos en lugar de en atributos.

• Los comentarios proveen una manera de insertar en un docu-mento XML texto que no es parte del documento, pero es destinado a la gente que está leyendo el código fuente XML.

• Los comentarios comienzan con <! - - y terminan con -- >.• No se puede poner un comentario dentro de una etiqueta.

Page 5: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

DTD<!DOCTYPE <root tag> [<!ELEMENT <name>(<components>)>. . . more elements . . .

]>

• The description of an element consists of its name (tag), and a parenthesized description of any nested tags.– Includes order of subtags and their multiplicity.

• Un identificador de sistema permite especificar lalocalización física de un archivo en el sistema. Se componede dos partes: la palabra clave SYSTEM seguida por unareferencia URI a un documento con una localización física.Ejemplo:<!DOCTYPE name SYSTEM "name.dtd" [...]><!DOCTYPE name SYSTEM "file:///c:/name.dtd" [...]> <!DOCTYPE name SYSTEM "http://sernaferna.com/hr/name.dtd" [...]>

Page 6: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

DTD

• A tag may be followed by a symbol to indicate its multiplicity.– * = zero or more.– + = one or more.– ? = zero or one.

• Cuando no se usa indicador de cardinalidadindica que el ele-mento debe aparecer una y solo una vez. Este es el comportamiento por default para elementos usados en modelos de contenido.

• Symbol | can connect alternative sequences of tags (it acts like an exclusive or).

Page 7: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

DTD

• Either:

a) Include the DTD as a preamble of the XML document, or

b) Follow DOCTYPE and the <root tag> by SYSTEM and a path to the file where the DTD can be found.

Page 8: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

8

Example (a)<?xml version = “1.0” standalone = “no” ?><!DOCTYPE BARS [

<!ELEMENT BARS (BAR*)><!ELEMENT BAR (NAME, BEER+)><!ELEMENT NAME (#PCDATA)><!ELEMENT BEER (NAME, PRICE)><!ELEMENT PRICE (#PCDATA)>

]><BARS>

<BAR><NAME>Joe’s Bar</NAME><BEER><NAME>Bud</NAME> <PRICE>2.50</PRICE></BEER><BEER><NAME>Miller</NAME> <PRICE>3.00</PRICE></BEER>

</BAR> <BAR> …

</BARS>

The DTD

The document

Page 9: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

9

Example (b)

• Assume the BARS DTD is in file bar.dtd.<?xml version = “1.0” standalone = “no” ?>

<!DOCTYPE BARS SYSTEM “bar.dtd”>

<BARS>

<BAR><NAME>Joe’s Bar</NAME>

<BEER><NAME>Bud</NAME>

<PRICE>2.50</PRICE></BEER>

<BEER><NAME>Miller</NAME>

<PRICE>3.00</PRICE></BEER>

</BAR>

<BAR> …

</BARS>

Get the DTDfrom the filebar.dtd

Page 10: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

DTD

• Attributes can be pointers from one object to another.– Compare to HTML’s NAME = “foo” and HREF = “#foo”.

• Allows the structure of an XML document to be a general graph, rather than just a tree.

• Give an element E an attribute A of type ID.• When using tag <E > in an XML document, give its

attribute A a unique value.• Example:

<E A = “xyz”>

Page 11: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

DTD

• To allow objects of type F to refer to another object with an ID attribute, give F an attribute of type IDREF.

• Or, let the attribute have type IDREFS, so the F–object can refer to any number of other objects.

Page 12: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

12

DTD

• We can do all the work of an element in its attributes.

• Another example: SELLS elements could have attribute price rather than a value that is a price.

Page 13: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

13

DTD

• In the DTD, declare:

<!ELEMENT SELLS EMPTY>

<!ATTLIST SELLS theBeer IDREF #REQUIRED>

<!ATTLIST SELLS price CDATA #REQUIRED>

• Example use:

<SELLS theBeer = “Bud” price = “2.50”/>

Note exception to“matching tags” rule

Page 14: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

DTD• Ejemplo: la siguiente es una declaración de un atributo:

name CDATA #IMPLIED

• En el ejemplo anterior el nombre del atributo es name. He-mos declarado que ese atributo puede contener datos de ca-racteres usando la palabra reservada CDATA. Este es el tipodel atributo name. Luego decimos que el atributo no tiene va-lor por default y luego decimos que ese atributo no necesitaaparecer dentro del elemento usando la palabra clave#IMPLIED.

• Cuando se especifica un atributo como requerido, debe serincluido dentro del documento XML. Para declarar un atributocomo requerido hay que usar la pa-labra clave #REQUIREDluego del tipo del atributo. Cuando un atributo es requeridono se puede especificar un valor default.

Page 15: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

DTD• ENUMERATED LIST: Además de usar los tipos default se puede

declarar una lista enumerada de posibles valores para el valor de un atributo.

• Ejemplo:<!ATTLIST name title (Mr. | Mrs. | Ms. | Miss | Dr. | Rev) #IMPLIED>

• Se han declarado los valores permitidos entre paréntesis. To-dos los posibles valores son separados por ‘|’.

• Algunos valores válidos del atributo title son:<name title="Mr.">

<name title="Miss">

• Especificar un atributo por default es fácil; simplemente inclu-ya elvalor entre comillas luego del tipo del atributo.

• Ejemplo:<!ATTLIST name title (Mr. | Mrs. | Ms. | Miss | Dr. | Rev) "Mr.">

Page 16: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

Ejemplo de Referencia

<catalog><product dept="WMN">

<number>557</number><name language="en">

Fleece Pullover</name><colorChoices>

navy black</colorChoices>

</product><product dept="ACC">

<number>563</number><name language="en">

Floppy Sun Hat</name>

</product>

<product dept="ACC"><number>443</number>

<name language="en">Deluxe Travel Bag

</name></product><product dept="MEN">

<number>784</number><name language="en">

Cotton Dress Shirt</name>

<colorChoices>white gray

</colorChoices><desc>

Our <i>favorite</i> shirt!</desc>

</product></catalog>

Page 17: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

Ejemplo de referencia

<order num="00299432" date="2006-09-15" cust="0221A">

<item dept="WMN" num="557" quantity="1" color="navy"/>

<item dept="ACC" num="563" quantity="1"/>

<item dept="ACC" num="443" quantity="2"/>

<item dept="MEN" num="784" quantity="1" color="white"/>

<item dept="MEN" num="784" quantity="1" color="gray"/>

<item dept="WMN" num="557" quantity="1" color="black"/>

</order>

Page 18: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

Ejemplo de Referencia<prices>

<priceList effDate="2006-11-15"><prod num="557">

<price currency="USD">29.99</price><discount type="CLR">10.00</discount>

</prod><prod num="563">

<price currency="USD">69.99</price></prod><prod num="443">

<price currency="USD">39.99</price><discount type="CLR">3.99</discount>

</prod></priceList>

</prices>

Page 19: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XPath

• Simple path descriptors are sequences of tags separated by slashes (/).

• If the descriptor begins with /, then the path starts at the root and has those tags, in order.

• If the descriptor begins with //, then the path can start anywhere.

• Each path descriptor, applied to a document, has a value that is a sequence of elements.

• An element is an atomic value or a node.• A node is matching tags and everything in between.

– I.e., a node of the semistructured graph.

Page 20: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XPath

• A star (*) in place of a tag represents any one tag.

• Example: /*/*/PRICE represents all price objects at the third level of nesting.

• A condition inside *…+ may follow a tag.

• If so, then only paths that have that tag and also satisfy the condition are included in the result of a path expression.

Page 21: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XPath

• Los pasos en un camino pueden ser expresiones primarias como llamadas a función (p.ej. doc(“catalog.xml”)) o referencias a variables ($catalog). Toda expresión que retorna nodos puede estar en el lado izquierdo del operador ‘/’.

• “.” representa el nodo de contexto corriente en simismo, sin consideración de su tipo de nodo.

• “..” representa el nodo padre, el cual puede ser unnodo ele-mento o el nodo documento.

• “@” es usada junto con un nodo prueba o comodín.(p.ej. @dept elige los atributos de dept y @* eligetodos los atributos).

Page 22: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XPath• Una expresión camino es siempre evaluada relativa a un

ítem de contexto particular, el cual sirve como el punto departida para un camino relativo. Algunas expresionescamino comienzan con un paso que fija el ítem de contexto,como en:

doc("catalog.xml")/catalog/product/number

• La llamada de función doc("catalog.xml") retorna el nododocumento de catalog.xml, el cual se convierte en el ítemde contexto.

• Cuando un ítem de contexto es un nodo se llama nodo decontexto. El resto del camino es evaluado relativo almismo.

• En $catalog/product/number el valor de la variable $catalogfija el contexto. La variable debe elegir cero, uno o másnodos, los cuales se convierten en nodos de contexto parael resto de la expresión.

Page 23: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XPath• Una expresión camino puede ser relativa. Por ejemplo, puede

simplemente comenzar con un nombre como en product/number. Esto significa que la expresión de camino va a ser evaluada re-lativa al nodo de contexto corriente, el cual debe haber sido previamente determinado fuera de la expresión. Puede haber sido fijado por el procesador fuera del alcance de la consulta o en una expresión externa.

• El ítem de contexto cambia con cada paso. Un paso retorna unasecuencia de cero, uno o más nodos que sirven como los ítems decontexto para evaluar el paso siguiente. P.ej. En:

doc("catalog.xml")/catalog/product/number

• El paso doc("catalog.xml") retorna un nodo documento que sirvecomo el ítem de contexto cuando se evalúa el paso catalog. El pasocatalog es evaluado usando el nodo documento como el nodo decontexto corriente, retornando una secuencia de un elementocatalog hijo del nodo documento. Ese elemento catalog sirve comoel nodo de contexto para la evaluación del paso product, el cualretorna la secuencia de hijos product de catalog. El paso final,number es evaluado para cada hijo product en la secuencia.

Page 24: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery

• XQuery extends XPath to a query language that has power similar to SQL.

• XQuery is an expression language.

– Like relational algebra --- any XQuery expression can be an argument of any other XQueryexpression.

– Unlike RA, with the relation as the sole datatype, XQuery has a subtle type system.

Page 25: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Type System

• El modelo de datos de XQuery (XDM) describe la estructurade entradas y salidas de una consulta. XDM tiene lassiguientes componentes básicas:– Nodo: es una construcción XML tales como un elemento o un atributo.

– Valor atómico: es un valor de datos simple sin marcas asociada con el mismo.

– Item: es un término genérico que se refiere a un nodo o a un valor atómico.

– Secuencia: una lista ordenada de cero, uno o más ítems.

Page 26: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

26

XQuery: Type System

1. Atomic values : strings, integers, etc.

Also, certain constructed values like true(), date(“2004-09-30”).

2. Nodes.

Seven kinds.

We’ll only worry about four, on next slide.

Page 27: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

27

XQuery: Type System

1. Element Nodes are like nodes of semistructured data.

Described by !ELEMENT declarations in DTD’s.

2. Attribute Nodes are attributes, described by !ATTLIST declarations in DTD’s.

3. Text Nodes = #PCDATA.

4. Document Nodes represent files.

Page 28: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Valores para un nodo

• Hay dos tipos de valores para un nodo: string y tipado. Todoslos nodos tienen un valor string. El valor string de un nodoelemento es su contenido de datos carácter y los contenidosde datos carácter de todos sus elementos descendientesconcatenados entre sí. El valor string de un nodo atributo essimplemente el valor del atributo.

• El valor string de un nodo puede ser accedido usando lafunción string.

• Nodos de elementos y atributos tienen un valor tipado quetoma en cuenta su tipo si lo hay. Un elemento o atributo pue-de tener un tipo particular si ha sido validado con un esque-ma. El valor tipado de un nodo puede ser accedido usando lafunción data.

Page 29: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery

• Form: document(“<file name>”).

• Establishes a document to which a query applies.

• Example: document(“/usr/ullman/bars.xml”)

Page 30: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

30

XQuery Values

• Item = node or atomic value.• Value = ordered sequence of zero or more items.• Examples:

1. () = empty sequence.2. (“Hello”, “World”)3. (“Hello”, <PRICE>2.50</PRICE>, 10)

• A value can, in principle, be an item of another value.• But nested list structures are expanded.• Example: ((1,2),(),(3,(4,5))) = (1,2,3,4,5) = 1,2,3,4,5.• Important when values are computed by concatenating

other values.

Page 31: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

31

XQuery: Some Operators

• Use Fortran comparison operators to compare atomic values only.

– eq, ne, gt, ge, lt, le.

• Arithmetic operators: +, - , *, div, idiv, mod.

– Apply to any expressions that yield arithmetic or date/time values.

Page 32: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

32

XQuery: Effective Boolean Values

• The effective boolean value (EBV) of an expression is:

1. The actual value if the expression is of type boolean.

2. FALSE if the expression evaluates to 0, “” *the empty string], or () [the empty sequence].

3. TRUE otherwise.

Page 33: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

33

XQuery: EBV Examples

1. @name=”JoesBar” has EBV TRUE or FALSE, depending on whether the name attribute is ”JoesBar”.

2. /BARS/BAR*@name=”GoldenRail”+ has EBV TRUE if some bar is named the Golden Rail, and FALSE if there is no such bar.

Page 34: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

34

XQuery: Boolean Operators

• E1 and E2, E1 or E2, not(E )

• if (E1) then E2 else E3 apply to any expressions.

• Take EBV’s of the expressions first.

• Example: not(3 eq 5 or 0) has value TRUE.

• Also: true() and false() are functions that return values TRUE and FALSE.

Page 35: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Secuencias• Una secuencia puede también ser creada explícitamente

usando un constructor de secuencia. La sintaxis de un cons-tructor de secuencia es una serie de valores delimitados porcomas y encerrada entre paréntesis (p.ej. (1, 2, 3) crea se-cuencia consistente en 3 valores atómicos). También se pue-den usar expresiones dentro de constructores de secuencia.

• Las secuencias son ordenadas y el orden no es necesariamen-te el mismo que el orden del documento. Además las secuen-cias pueden contener nodos duplicados.

• Las secuencias no tienen nombres, aunque pueden estarligadas a una variable nombrada.

• Una secuencia con solo un ítem se llama secuencia singleton.No hay diferencia entre una secuencia singleton y el ítem quecontiene. Así todas las funciones u operadores que operan ensecuencias también pueden operar en ítems, los cuales sontratados como secuencias singleton.

Page 36: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Sequencias

• Una secuencia con 0 ítems se llama secuencia vacía. En XQuery

la secuencia vacía es distinta del string vacío (“”) o de un valor0. Muchas de las funciones y operaciones built-in aceptan lasecuencia vacía como argumento y han definido un comporta-miento para manejarla.

• Las secuencias no pueden ser anidadas dentro de otrassecuencias; hay solo un nivel de ítems. Las secuenciaspueden ser insertadas en otras secuencias (p.ej. (10, (20, 30),40) es equivalente a (10, 20, 30, 40)).

• Algunas de las funciones en secuencia más usadas son lasfunciones de agregación (min, max, avg, sum).

Page 37: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

37

XQuery: Sequences

• union, intersect, except operate on sequences of nodes.

– Meanings analogous to SQL.

– Result eliminates duplicates.

– Result appears in document order.

Page 38: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Sequencias

• Hay también un número de funciones que operan genéricamente en toda secuencia tales como:– index-of: find an item in the sequence.

– insert-before: insert items into a sequence. Ejemplo:insert-before((1, 2, 3, 4), 2, (5, 6)) => (1, 5, 6, 2, 3, 4)

– count: the length of the sequence.

– distinct-values: remove all duplicate values

– remove: remove items from a sequence. Ej: remove($seq,2)

– subsequence: select a subsequence. Ej: subsequence($seq, 1, 3)

– exists: true if the sequence is not empty.

Page 39: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Literals

• Literales son simplemente valores constantes que son repre-sentados directamente en una consulta. P.ej. “BBC” y 23,45.Los literales pueden usarse en expresiones en todo lugar don-de un valor constante es necesitado.

• Hay dos tipos de literales: literales string que deben estar en-globados entre comillas o apóstrofes, y literales numéricosque pueden tomar la forma de enteros simples, números de-cimales o números en punto flotante. El procesador hace su-posiciones acerca del tipo de un literal numérico basado en suformato.

• Se pueden usar constructores de tipo para convertir sus va-lores literal al tipo deseado (p.ej. xs:date(“2007-12-04”)).

Page 40: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Funciones

• Las funciones son definidas usando declaraciones de funcio-nes, las cuales pueden aparecer en el prólogo o en una biblio-teca externa.

• Ejemplo: la siguiente es una declaración de función:

declare function local:discountPrice( $price as xs:decimal?,

$discount as xs:decimal?,

$maxDiscountPct as xs:integer?) as xs:decimal? {

let $maxDiscount := ($price * $maxDiscountPct) div 100

let $actualDiscount := min(($maxDiscount, $discount))

return ($price - $actualDiscount)

};

Page 41: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Funciones

• Una declaración de funciones consiste de varias partes:– Las palabras clave declare function seguidas por un nombre de fun-

ción.

– Una lista de parámetros entre paréntesis y separados por coma.

– El tipo de retorno de la función.

– Un cuerpo de función entre llaves y seguido de ‘;’.

• El cuerpo de una función puede contener cualquier expresiónXQuery válida, incluyendo FLWORs, expresiones camino ycualquier otra expresión XQuery. No necesita contener unacláusula return; el valor de retorno es simplemente el valor dela expresión.

• Ejemplo: declare function local:get-pi( ) {3.141592653589};

Page 42: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Funciones• Dentro del cuerpo de una función una función puede invocar

otras funciones, sin importar el orden de sus declaraciones.

• Si no se especifica el tipo de retorno se asume que es item*,esto es, una secuencia de cero o más valores atómicos ynodos.

• Cada parámetro en una lista de parámetros tiene un nombreúnico y opcionalmente un tipo. El nombre es expresado comoun nombre de variable, precedido por $. Cuando se llama unafunción, la variable especificada es ligada al valor que es pasa-do a la misma. Si no se especifica un tipo para un parámetroespecificado, permite cualquier argumento. Sin embargo, eslo mejor especificar el tipo, para chequeo de errores y clari-dad.

Page 43: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: prólogo

• El prólogo consiste de una serie de declaraciones terminadas por ‘;’. Hay 3 secciones distintas en un prólogo.

• La primera declaración a aparecer en el prólogo es la declara-ción de versión si existe. La sintaxis es:

XQuery version “<version>” encoding “<character encoding>” ;

• La última sección del prólogo contiene declaraciones defunciones y de variables.– Declaraciones de funciones: declaran funciones definidas por el usua-

rio.

– Declaraciones de variables: declara variables globales.

Page 44: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: prólogo

• Variables pueden opcionalmente declaradas en un prólogo deconsulta. Si una variable es ligada dentro de una expresión enel cuerpo de la consulta, no necesita ser declarada en elprólogo.

• Crear variables en el prólogo puede ser también una formaútil de definir constantes o valores que pueden ser calculadosantes y usados a lo largo de la consulta. Hay que recordar quevariables globales son inmutables tal como las otras variablesXQuery. La sintaxis de una declaración de variable es:

declare variable $ <variable-name> := <expr> ;

Page 45: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: prólogo

• Ejemplo: declare variable $maxItems := 12;

• Si un cuerpo de función referencia una variable que es decla-rada en el prólogo, la declaración de función debe aparecerdespués de la declaración de variable. Si una variable globalreferencia a otra, la variable referenciante debe venir despuésque la variable referenciada. Una variable puede ser ligada so-lo una vez.

• La expresión que especifica el valor de una variable se conocecomo la expresión de inicialización. La misma no tiene por-que ser una constante y puede ser cualquier expresiónXQuery válida. La expresión de inicialización puede llamar unafunción.

Page 46: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery

• Las variables en XQuery son identificadas por nombres queson precedidos por ‘$’.

• Cuando se evalúa una consulta una variable está ligada a unvalor particular. Ese valor puede ser cualquier secuencia,incluyendo un nodo simple, un valor atómico simple, lasecuencia vacía o varios nodos y/o valores atómicos. Una vezque la variable está ligada a un valor su valor no cambia. Unaconsecuencia de esto es que no se puede asignar un valornuevo a una variable. En lugar de eso se usa una nuevavariable.

Page 47: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery

• Lamadas a función son otro bloque de construcción paraconsultas. Una llamada a función típica tiene un nombre defunción y argumentos entre paréntesis separados por coma.Los argumentos pueden ser referencias a variables, literales,etc.

• XQuery tiene alrededor de 100 funciones built-in.

• Para comparar los contenidos y atributos de dos nodos sepuede usar la función built-in deep-equal.

• Comparison by document order: << and >>.

• Example: $d/BARS/BEER*@name=”Bud”+ << $d/BARS/BEER*@name=”Miller”+ is true iff the Bud element appears before the Miller element in the document $d.

Page 48: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

48

Example Document

<BARS>

<BAR name = “JoesBar”>

<PRICE theBeer = “Bud”>2.50</PRICE>

<PRICE theBeer = “Miller”>3.00</PRICE>

</BAR> …

<BEER name = “Bud” soldBy = “JoesBar

SuesBar … ”/> …

</BARS>

Page 49: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

Query<html>

<h1>Product Catalog</h1><ul>{

for $prod in doc("catalog.xml")/catalog/productreturn <li>number: {data($prod/number)}, name: {data($prod/name)}</li>

}</ul></html>Results<html><h1>Product Catalog</h1><ul>

<li>number: 557, name: Fleece Pullover</li><li>number: 563, name: Floppy Sun Hat</li><li>number: 443, name: Deluxe Travel Bag</li><li>number: 784, name: Cotton Dress Shirt</li>

</ul></html>

Page 50: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

• El resultado de la consulta anterior es un fragmento XHTML quepresenta los datos elegidos. El constructor de elemento h1 contieneel literal Product Catalog que aparece en el resultado como el con-tenido de h1. El constructor de elemento ul contiene otra expresiónXQuery entre llaves. Esto se llama expresión englobada y su valorse convierte en el contenido del elemento ul en los resultados. Enes-te caso la expresión englobada evalúa a una secuencia deelementos li, los cuales pueden aparecer como hijos del elementoul en los resultados. El constructor de elemento li contiene unacombinación de literales (los string number: y name:) y expresionesenglobadas, cada una de las cuales evalúa a un valor atómico. Todocontenido de constructor de elemento afuera de las llaves esconsiderado un literal.

Page 51: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

• Los constructores de elementosdirectos usan una sintaxis que separece mucho a XML. Las etique-tas usan ‘<‘ y ‘>’, los nombres de-ben ser nombres XML válidos, to-da start-tag debe tener una co-rrespondiente end-tag. Ademásse pueden usar nombres prefija-dos e incluso se pueden incluirdeclaraciones de espacios denombres. Los atributos dentro deun constructor de elemento di-recto deben tener nombres úni-cos.

• Constructores de elementos di-rectos pueden contener otrosconstructores de elementos di-rectos.

Query<html>

<h1>Product Catalog</h1><p>A <i>huge</i> list of {count(doc("catalog.xml")//product)} products.</p>

</html>Results<html>

<h1>Product Catalog</h1><p>A <i>huge</i> list of 4 products.</p>

</html>

• El constructor de elemento html con-tiene constructores de elementos pa-ra h1. El constructor de elemeto pcontiene una combinación de conteni-do de datos y un constructor para elelemento i y la expresión englobada.

Page 52: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

• Es posible para una expresión englobada evaluar a una se-cuencia de atributos u otros nodos, valores atómicos o inclusocombinaciones de nodos y valores atómicos.

• Si la expresión englobada evalúa a una secuencia de elemen-tos y valores atómicos, el elemento resultado tiene contenidomezclado, donde el orden de los elementos hijo y datos carác-ter son preservados.

• Ejemplo:Query

for $prod in doc("catalog.xml")/catalog/product

return <li>number: {$prod/number}</li>

Results

<li>number: <number>557</number></li>

<li>number: <number>563</number></li>

<li>number: <number>443</number></li>

<li>number: <number>784</number></li>

Page 53: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

• Si un constructor de elemento contiene una expresión englo-bada que evalúa a uno o más atributos, esos atributos se con-vierten en atributos del elemento bajo construcción. Ejemplo:Query

for $prod in doc("catalog.xml")/catalog/product

return <li>{$prod/@dept}number: {$prod/number}</li>

Results

<li dept="WMN">number: <number>557</number></li>

<li dept="ACC">number: <number>563</number></li>

<li dept="ACC">number: <number>443</number></li>

<li dept="MEN">number: <number>784</number></li>

• Expresiones englobadas que evalúan a atributos deben apare-cer primero en el constructor de contenido de elemento, an-tes que otros tipos de nodos.

Page 54: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

• Si una expresión englobada evalúa a uno o más valores atómicos, esos valores son convertidos a xs:string e incluidos como contenido de datos carácter del elemento. Cuando valores atómicos adyacentes aparecen en la secuencia de expresión, son separados por un espacio en el contenido del elemento.

• Ejemplo: <li>{"x", "y", "z"}</li> va a retornar <li>x y z</li>. Para evitar los espacios se puede usar: <li>{"x"}{"y"}{"z"}</li>, otra op-ción es usar la función concat: <li>{concat("x", "y", "z")}</li>.

• Expresiones englobadas pueden incluir más de una subexpre-sión dentro de llaves usando comas como separadores. Ejemplo:

Page 55: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

Query

for $prod in doc("catalog.xml")/catalog/product

return <li>{$prod/@dept,"string",5+3,$prod/number}</li>

Results

<li dept="WMN">string 8<number>557</number></li>

<li dept="ACC">string 8<number>563</number></li>

<li dept="ACC">string 8<number>443</number></li>

<li dept="MEN">string 8<number>784</number></li>

• Los atributos también pueden ser construidos directamente usando sintaxis XML. Los valores de atributo pueden ser espe-cificados usando un texto literal o expresiones englobadas o una combinación de los dos. Ejemplo:

Page 56: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

<html><h1 class="itemHdr">Product Catalog</h1><ul>{

for $prod in doc("catalog.xml")/catalog/productreturn <li dep="{$prod/@dept}">number: {data($prod/number)

}, name: {data($prod/name)}</li>}</ul></html>Results<html><h1 class="itemHdr">Product Catalog</h1><ul>

<li dep="WMN">number: 557, name: Fleece Pullover</li><li dep="ACC">number: 563, name: Floppy Sun Hat</li><li dep="ACC">number: 443, name: Deluxe Travel Bag</li><li dep="MEN">number: 784, name: Cotton Dress Shirt</li>

</ul></html>

Page 57: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

• En el ejemplo anterior el atributo dep va a aparecer sin impor-tar si hay un atributo dep del elemento $prod; si este elemen-to no tiene atributo dep, el valor del atributo dep va a ser elstring vacío.

• El literal texto es usado en un constructor de atributo directoy sigue reglas similares al texto literal en constructores de ele-mentos.

• La evaluación de expresiones englobadas en valores de atribu-tos es levemente diferente aquellas en contenido de elemen-to. Como los atributos no pueden tener hijos o atributos, elvalor del atributo debe evaluar a un valor no atómico. Así si u-na expresión englobada en un valor atributo evalúa a uno omás elementos o atributos, el valor de los nodos es extraído yconvertido a string.

Page 58: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: ConstructoresQuery<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">

<xhtml:h1 class="itemHdr">Product Catalog</xhtml:h1><xhtml:ul>{

for $prod in doc("catalog.xml")/catalog/productreturn <xhtml:li class="{$prod/@dept}">number: {

data($prod/number)}</xhtml:li>}</xhtml:ul>

</xhtml:html>Results<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">

<xhtml:h1 class="itemHdr">Product Catalog</xhtml:h1><xhtml:ul>

<xhtml:li class="WMN">number: 557</xhtml:li><xhtml:li class="ACC">number: 563</xhtml:li><xhtml:li class="ACC">number: 443</xhtml:li><xhtml:li class="MEN">number: 784</xhtml:li>

</xhtml:ul></xhtml:html>

Page 59: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

• Suponga que quiere incluir ele-mentos del documento de entra-da, pero quiere hacer modificacio-nes menores tales como agregar oremover un hijo o un atributo. Pa-ra hacer eso el nuevo elementodebe ser creado usando un cons-tructor.

• Ejemplo: incluir elementos productdel documento de entrada, perose agrega un atributo adicional idque es igual a la letra P más el nú-mero de producto. La consulta ha-ce una nueva copia del elemen-toproduct, la cual contiene la expre-sión englobada {$prod/(@*, *)}para copiar todos los atributos yelementos hijo del elementoproduct original.

Queryfor $prod in doc("catalog.xml")/catalog/product[@dept = 'ACC']

return <product id="P{$prod/number}">{$prod/(@*, *)}

</product>Results<product dept="ACC" id="P563">

<number>563</number><name language="en">Floppy Sun Hat</name>

</product><product dept="ACC" id="P443">

<number>443</number><name language="en">Deluxe Travel Bag</name>

</product>

Page 60: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Constructores

• Ejemplo: suponga que quiere co-piar algunos elementos de productdel documento de entrada pero remover el hijo number. Esto pue-de lograrse usando la consulta a la derecha.

• La expresión englobada $prod/(@*, * except number)elige todos los atributos y todos los elementos hijo de productexcepto number.

Queryfor $prod in

doc("catalog.xml")/catalog/product[@dept = 'ACC']

return <product>{$prod/(@*, * except number)}

</product>Results<product dept="ACC">

<name language="en">Floppy Sun Hat</name>

</product><product dept="ACC">

<name language="en">Deluxe Travel Bag</name>

</product>

Page 61: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

61

XQuery: FLWR expressons• Now we explain the semantics of FLWR

Expressions.

• Each for creates a loop.– let produces only a local definition.

• At each iteration of the nested loops, if any, evaluate the where clause.

• If the where clause returns TRUE, invoke the return clause, and append its value to the output.

Page 62: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

62

XQuery: FLWR expressions

for <variable> in <expression>, . . .

• Variables begin with $.

• A for-variable takes on each item in the sequence denoted by the expression, in turn.

• Whatever follows this for is executed once for each value of the variable.

Page 63: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

63

XQuery : FLWR expressions

for $beer in document(“bars.xml”)/BARS/BEER/@name

return

<BEERNAME> {$beer} </BEERNAME>

• $beer ranges over the name attributes of all beers in our example document.

• Result is a list of tagged names, like <BEERNAME>Bud</BEERNAME> <BEERNAME>Miller</BEERNAME> . . .

“Expand the en-closed string byreplacing variablesand path exps. bytheir values.”

Page 64: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

64

XQuery: FLWR expressions

let <variable> := <expression>, . . .

• Value of the variable becomes the sequenceof items defined by the expression.

• Note let does not cause iteration; for does.

Page 65: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

65

XQuery: FLWR expressons

let $d := document(“bars.xml”)

let $beers := $d/BARS/BEER/@name

return

<BEERNAMES> {$beers} </BEERNAMES>

• Returns one element with all the names of the beers, like:

<BEERNAMES>Bud Miller …</BEERNAMES>

Page 66: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Expresiones Cuantificadas

• Cuando una variable es ligada en una cláusula for o let, puedeser referenciada en cualquier lugar en esa FLWOR luego de lacláusula que la liga, pero no antes.

• Una expresión cuantificada determina si algunos o todos losítems en una secuencia cumplen con una determinada condi-ción.

• Ejemplo: para averiguar si algún ítem en una orden son deldepartamento de accesorios:some $dept in doc("catalog.xml")//product/@dept

satisfies ($dept = "ACC")

• Ejemplo: para averiguar si todos los ítems en una orden sondel departamento de accesorios:every $dept in doc("catalog.xml")//product/@dept

satisfies ($dept = "ACC")

Page 67: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Expresiones Cuantificadas

• Una expresión cuantificada siempre evalúa a un valor Boolea-no. Expresiones cuantificadas pueden usualmente ser fácil-mente reescritas como FLWORs o expresiones de camino. Sinembargo, una expresión cuantificada puede ser más compac-ta y fácil para optimizar implementaciones.

• Una expresión cuantificada es hecha de varias partes:– Un cuantificador (some o every).

– Una o más cláusulas in que ligan variables a secuencias.

– Una cláusula satisfies que contiene la expresión de prueba.

• La sintaxis de una expresión cuantificada es:(some|every) ($ <variable-name> in <expr> ,)+ satisfies <expr>

• El procesador prueba la expresión satisfies para cada ítem enla secuencia. Si el cuantificador es some, retorna true si la ex-presión satisfies es true para alguno de los ítems. Si el cuanti-ficador es every retorna true si la expresión satisfies es truepara todos los ítems.

Page 68: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Expresiones Cuantificadas

• Si no hay ítems en la secuencia, una expresión con some siem-pre retorna false, mientras que una expresión con every siem-pre retorna true.

• Se puede usar la función not con una expresión cuantificada para expresar ninguno y no todos.

• Ejemplo:

not(some $dept in doc("catalog.xml")//product/@dept satisfies ($dept = "ACC"))

• Se pueden ligar múltiples variables en una expresión cuantifi-cada separando las cláusulas por coma. Como con las cláusu-las for de FLWORs el resultado es que toda combinación de los ítems en las secuencias es considerado.

• Ejemplo: la siguiente expresión evalúa a true.some $i in (1 to 3), $j in (10, 11)

satisfies $j - $i = 7

Page 69: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

69

XQuery: Quantifier Expressions

some $x in E1 satisfies E2

1. Evaluate the sequence E1.

2. Let $x (any variable) be each item in the sequence, and evaluate E2.

3. Return TRUE if E2 has EBV TRUE for at least one $x.

• Analogously:

every $x in E1 satisfies E2

Page 70: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: distinct-values

• La función distinct-values elige distintos valores atómicos deuna secuencia. Por ejemplo:distinct-values(doc("catalog.xml")//product/@dept)

Retorna todos los distintos valores del atributo dept. Se deter-mina si dos valores son distintos basados en la igualdad de susvalores usando el operador eq.

• Es también común elegir un conjunto de combinaciones dis-tintas de valores. No se puede usar la función distinct-valuespara esto porque acepta solo una secuencia de valores atómi-cos, no varias secuencias de múltiples valores.

• Ejemplo: elegir a partir de catalog los distintas combinacionesde department/product .

Page 71: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

Selección y combinación con FLWORs

Query

let $prods := doc("catalog.xml")//product

for $d in distinct-values($prods/@dept),

$n in distinct-values($prods[@dept = $d]/number)

return <result dept="{$d}" number="{$n}"/>

Results

<result dept="WMN" number="557"/>

<result dept="ACC" number="563"/>

<result dept="ACC" number="443"/>

<result dept="MEN" number="784"/>

• Uno de los beneficios mayores de los FLWORs es que pueden fácilmente combinar datos de varias fuentes.

Page 72: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

72

XQuery: Following IDREF’s

• XQuery (but not XPath) allows us to use paths that follow attributes that are IDREF’s.

• If x denotes a sequence of one or more IDREF’s, then x =>y denotes all the elements with tag y whose ID’s are one of these IDREF’s.

Page 73: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

73

XQuery: Following IDREF’S

• Find all the beer elements where the beer is sold by Joe’s Bar for less than 3.00.

• Strategy:

1. $beer will for-loop over all beer elements.

2. For each $beer, let $joe be either the Joe’s-Bar element, if Joe sells the beer, or the empty sequence if not.

3. Test whether $joe sells the beer for < 3.00.

Page 74: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

74

XQuery: Following IDREF’S

let $d := document(”bars.xml”)

for $beer in $d/BARS/BEER

let $joe := $beer/@soldBy=>BAR*@name=“JoesBar”+

let $joePrice := $joe/PRICE[@theBeer=$beer/@name]

where $joePrice < 3.00

return <CHEAPBEER> {$beer} </CHEAPBEER>

Attribute soldBy is of typeIDREFS. Follow each refto a BAR and check if itsname is Joe’s Bar.

Find that PRICE subelementof the Joe’s Bar element thatrepresents whatever beer iscurrently $beer.

Only pass the values of$beer, $joe, $joePrice tothe RETURN clause if thestring inside the PRICEelement $joePrice is < 3.00

Page 75: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

75

XQuery: Order-By Clauses

• FLWR is really FLWOR: an order-by clause can precede the return.

• Form: order by <expression>

– With optional ascending or descending.

• The expression is evaluated for each output element.

• Determines placement in output sequence.

Page 76: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Example of Order-By

• Ejemplo:Querydeclare default order empty greatest;for $item in doc("order.xml")//itemorder by $item/@colorreturn $itemResults<item dept="WMN" num="557" quantity="1" color="black"/><item dept="MEN" num="784" quantity="1" color="gray"/><item dept="WMN" num="557" quantity="1" color="navy"/><item dept="MEN" num="784" quantity="1" color="white"/><item dept="ACC" num="563" quantity="1"/><item dept="ACC" num="443" quantity="2"/>

Page 77: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Agregación• Las consultas a menudo son escritas para organizar o resumir

información en categorías. Además de simplemente reagruparítems es a menudo deseable realizar cálculos en grupos. Esto puedehacerse usando funciones de agregación.

• Ejemplos de funciones de agregación son count, sum, min, max,avg. Estas funciones operan en secuencias. max y min aceptanvalores de cualquier tipo que sea ordenado. sum y avg aceptanvalores numéricos. sum, min y max tratan datos no tipados comonuméricos. Ejemplo:Query

for $d in distinct-values(doc("order.xml")//item/@dept)

let $items := doc("order.xml")//item[@dept = $d]

order by $d

return <department code="{$d}"

numItems="{count($items)}"

distinctItemNums="{count(distinct-values($items/@num))}"

totQuant="{sum($items/@quantity)}"/>

Page 78: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Agregación

Results

<department code="ACC" numItems="2" distinctItemNums="2" totQuant="3"/>

<department code="MEN" numItems="2" distinctItemNums="1" totQuant="2"/>

<department code="WMN" numItems="2" distinctItemNums="1" totQuant="2"/>

• La secuencia pasada a una función de agregación puede contener nodos que son strings vacíos, incluso aunque el usuario puede pensar acerca de ellos como valores faltantes.

• Puede haber casos donde se quiere que los valores faltantes sean tenidos en consideración.

• El siguiente es un ejemplo de agregación en múltiples valores.

Page 79: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Agregación

Querylet $allItems := doc("order.xml")//itemfor $d in distinct-values($allItems/@dept)for $n in distinct-values($allItems[@dept = $d]/@num)let $items := $allItems[@dept = $d and @num = $n]order by $d, $nreturn <group dept="{$d}" num="{$n}"

numItems="{count($items)}"totQuant="{sum($items/@quantity)}"/>

Results<group dept="ACC" num="443" numItems="1" totQuant="2"/><group dept="ACC" num="563" numItems="1" totQuant="1"/><group dept="MEN" num="784" numItems="2" totQuant="2"/><group dept="WMN" num="557" numItems="2" totQuant="2"/>

Page 80: Complementos de XML - famaf.unc.edu.argonzalez/bd2009/Complementos-de-… · •Valid XML involves a DTD (Document Type Definition), a grammar for tags. XML bien formado •Start

XQuery: Agregación• Además de retornar valores agregados en los resultados de las consultas

se puede restringir y ordenar los resultados en los valores agregados. Ejemplo:

Querylet $allItems := doc("order.xml")//itemfor $d in distinct-values($allItems/@dept)for $n in distinct-values($allItems/@num)let $items := $allItems[@dept = $d and @num = $n]where sum($items/@quantity) > 1order by count($items)return if (exists($items))

then <group dept="{$d}" num="{$n}" numItems="{count($items)}"totQuant="{sum($items/@quantity)}"/>

else ( )Results<group dept="ACC" num="443" numItems="1" totQuant="2"/><group dept="WMN" num="557" numItems="2" totQuant="2"/><group dept="MEN" num="784" numItems="2" totQuant="2"/>