• Tema 4

    Enunt

    1: Creati doua Scheme XML care sa corespunda urmatoarei specificatii. Sa presupunem ca lucrati intr-un magazin de inchiriat DVD-uri. Trebuie sa stocati informatii referitoare la titlurile DVD-urilor aflate in magazin si la review-urile lor folosind urmatoarea structura:

    Pentru fiecare titlu de DVD:

    DVD title (1 aparitie, required)

    DVD Release Date (CCYY-MM-DD) (0 sau o aparitie, optional)

    Studio/Production (0 sau o aparitie, optional)

    Rated (NC-17/R/PG/PG-13/G/NR) (0 sau o aparitie, optional)

    Region code (int cuprins intre 0 si 8, required)

    Director (0 sau mai multe aparitii, optional)

    Starring (0 sau mai multe aparitii, optional)

    Pentru fiecare review:

    DVD title (1 aparitie, required)

    Rating (int cuprins intre 1 si 5, required)

    Reviewer (0 sau o aparitie, optional)

    Review date (CCYY-MM-DD) (0 sau o aparitie, optional)

    Location of the reviewer (City, State) (1 aparitie, required)

    Review Description (1 aparitie, required)

    Observatii:

    1) Trebuie realizate doua XML Schema: una pentru titlurile DVD-urilor (dvdtitle.xsd) si una pentru review-uri (review.xsd) 2) Se vor impune restrictii referitoare la formatul datei (regular expressions), la valorile posibile pentru pentru campul “Rated” si pentru limitele valorilor ce indica codul regiunii si ratingul

    Part 2: Creati doua documente XML care sa respecte Schemele de la punctul 1 si care sa contina datele din tabelele de mai jos.

    Part 3: Folositi XQuery pentru a raspunde la urmatoarele 4 interogari.

    Interogari:

    1. Pentru fiecare studio in parte, afisati titlurile DVD-urilor care au fost realizate la studioul respectiv. Sortati iesirea in functie de numele studioului si de titlul DVD-ului in ordine crescatoare (de la A la Z)

    2. Afisati media ratingurilor reviewerilor pentru fiecare titlu de DVD. Sortati iesirea in functie de media obtinuta in ordine descrescatoare (de la cele cu media mare la cele cu media mica)

    3. Pentru fiecare reviewer in parte afisati numele tuturor DVD-urilor carora le-a facut

    review respectivul reviewer.

    4. Pentru toate studiourile care au media ratingurilor reviewerilor pentru toate DVD-urile produse la acel studio mai mare ca 3, afisati numele studioului, titlurile DVD-urilor realizate la acel studio si media ratingurilor reviewerilor. OBS: La punctul 2 aveati de calculat media reviewerilor pentru fiecare film in parte. La acest punct, trebuie calculata media reviewerilor pe intregul studio (adica daca un studio a produs mai multe filme, media studioului este data de media tuturor reviewerilor pentru toate filmele produse la acel studio).


    Sursele :

    Problema 3:

    < Reviewers> { for $var_reviewer in distinct-values( doc("review.xml")/dvd_reviews/dvd_review/reviewer ) order by data($var_reviewer) return < Reviewer > < name >{data($var_reviewer)} </ name > < DVDTitles > { for $var_review in doc("review.xml")/dvd_reviews/dvd_review[ reviewer = $var_reviewer ] return < Title >{$var_review/data(title)}</ Title > }< /DVDTitles > </ Reviewer > }

    Problema 2:

    < Ratings > { for $var_title in distinct-values( doc("dvdtitle.xml")/dvd_titles/dvd/title ) order by data($var_title) return < Title-Rating > < Title > {data($var_title)} < /Title& gt < avgrating > { let $var_avg := avg( doc("review.xml")/dvd_reviews/dvd_review[ title = $var_title ]/data(rating) ) return round(10*$var_avg) div 10 }< /avgrating > < /Title-Rating > } < Ratings >

    Probelma 1:

    < Studios > { for $var_studio in distinct-values(doc("dvdtitle.xml")/dvd_titles/dvd/studio_production) order by $var_studio return < Studio > < name > {data($var_studio)} < /name > < DVDTitles > { for $var_title in doc("dvdtitle.xml")/dvd_titles/dvd[ studio_production = $var_studio ]/title order by data($var_title) return < Title >{data($var_title)}</ Title > }</ DVDTitles > < /Studio > } < /Studios >

    Problema 4:

    < Studios > { for $var_studio in distinct-values( doc("dvdtitle.xml")/dvd_titles/dvd/studio_production ) order by data($var_studio) return if ( avg( for $var_title in doc("dvdtitle.xml")/dvd_titles/dvd[ studio_production = $var_studio ]/data(title) return doc("review.xml")/dvd_reviews/dvd_review[ data(title) = $var_title ]/data(rating) )>3 ) then &l tStudio > < name > {data($var_studio)} </ name > { for $var_title in doc("dvdtitle.xml")/dvd_titles/dvd[ studio_production = $var_studio ]/data(title) return < Title > {data($var_title)} < /Title > } < AverageRating >{ round( avg( for $var_title in doc("dvdtitle.xml")/dvd_titles/dvd[ studio_production = $var_studio ]/data(title) return doc("review.xml")/dvd_reviews/dvd_review[ data(title) = $var_title ]/data(rating) )*10 ) div 10 }</ AverageRating > < /Studio > else '' } </ Studios >