Τελική Εξέταση (3 ώρες) Ηµεροµηνία: Πέµπτη 12 Ιουνίου 2009

Σχετικά έγγραφα
Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

Βάσεις Δεδομένων ΙΙ. Διάλεξη 5 η XML και ΒΔ στο Διαδίκτυο

3. Επερώτηση XML Εγγράφων: Η Γλώσσα XPath

Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών. ΗΥ-561 Διαχείριση Δεδομένων στο Παγκόσμιο Ιστό Βασίλης Χριστοφίδης

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

EE512: Error Control Coding

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών. ΗΥ-561 ιαχείριση εδοµένων στο Παγκόσµιο Ιστό Βασίλης Χριστοφίδης

ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

2 Composition. Invertible Mappings

The challenges of non-stable predicates

3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β

Ordinal Arithmetic: Addition, Multiplication, Exponentiation and Limit

5. Επερώτηση XML Εγγράφων: Εισαγωγή στη Γλώσσα XQuery

CHAPTER 25 SOLVING EQUATIONS BY ITERATIVE METHODS

derivation of the Laplacian from rectangular to spherical coordinates

Every set of first-order formulas is equivalent to an independent set

Inverse trigonometric functions & General Solution of Trigonometric Equations

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Finite Field Problems: Solutions

ANSWERSHEET (TOPIC = DIFFERENTIAL CALCULUS) COLLECTION #2. h 0 h h 0 h h 0 ( ) g k = g 0 + g 1 + g g 2009 =?

C.S. 430 Assignment 6, Sample Solutions

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ342: Βάσεις Δεδομένων. Χειμερινό Εξάμηνο Φροντιστήριο 10 ΛΥΣΕΙΣ. Επερωτήσεις SQL

Section 8.3 Trigonometric Equations

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

The Simply Typed Lambda Calculus

Matrices and Determinants

Μορφοποίηση υπό όρους : Μορφή > Μορφοποίηση υπό όρους/γραμμές δεδομένων/μορφοποίηση μόο των κελιών που περιέχουν/

Nowhere-zero flows Let be a digraph, Abelian group. A Γ-circulation in is a mapping : such that, where, and : tail in X, head in

Δομές Δεδομένων & Αλγόριθμοι

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Σημασιολογικός Ιστός (Semantic Web) - XML

ω ω ω ω ω ω+2 ω ω+2 + ω ω ω ω+2 + ω ω+1 ω ω+2 2 ω ω ω ω ω ω ω ω+1 ω ω2 ω ω2 + ω ω ω2 + ω ω ω ω2 + ω ω+1 ω ω2 + ω ω+1 + ω ω ω ω2 + ω

Overview. Transition Semantics. Configurations and the transition relation. Executions and computation

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Section 1: Listening and responding. Presenter: Niki Farfara MGTAV VCE Seminar 7 August 2016

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

1. Αφετηρία από στάση χωρίς κριτή (self start όπου πινακίδα εκκίνησης) 5 λεπτά µετά την αφετηρία σας από το TC1B KALO LIVADI OUT

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

Reminders: linear functions

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

Example Sheet 3 Solutions

k A = [k, k]( )[a 1, a 2 ] = [ka 1,ka 2 ] 4For the division of two intervals of confidence in R +

ST5224: Advanced Statistical Theory II

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

Σχέσεις, Ιδιότητες, Κλειστότητες

Section 7.6 Double and Half Angle Formulas

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

Congruence Classes of Invertible Matrices of Order 3 over F 2

Tridiagonal matrices. Gérard MEURANT. October, 2008

Instruction Execution Times

10 MERCHIA. 10. Starting from standing position (where the SIGN START ) without marshal (self start) 5 minutes after TC4 KALO LIVADI OUT

Homework 3 Solutions

Fractional Colorings and Zykov Products of graphs

Statistical Inference I Locally most powerful tests

Εισαγωγή XML: Extensible Markup Language Ορίστηκε από το WWW Consortium (W3C) ως συµπλήρωµα της HTML. εν σχεδιάστηκε για βάσεις δεδοµένων αλλά για δια

Αλγόριθμοι Ταξινόμησης Μέρος 3

SCHOOL OF MATHEMATICAL SCIENCES G11LMA Linear Mathematics Examination Solutions

ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

2. THEORY OF EQUATIONS. PREVIOUS EAMCET Bits.

ΠΛΗ111. Ανοιξη Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΕΠΛ131 Αρχές Προγραμματισμού

ΚΥΠΡΙΑΚΟΣ ΣΥΝΔΕΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY 21 ος ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δεύτερος Γύρος - 30 Μαρτίου 2011

Lecture 2: Dirac notation and a review of linear algebra Read Sakurai chapter 1, Baym chatper 3

Physical DB Design. B-Trees Index files can become quite large for large main files Indices on index files are possible.

4.6 Autoregressive Moving Average Model ARMA(1,1)

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

A Note on Intuitionistic Fuzzy. Equivalence Relation

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

Phys460.nb Solution for the t-dependent Schrodinger s equation How did we find the solution? (not required)

Cambridge International Examinations Cambridge International General Certificate of Secondary Education

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

CRASH COURSE IN PRECALCULUS

Main source: "Discrete-time systems and computer control" by Α. ΣΚΟΔΡΑΣ ΨΗΦΙΑΚΟΣ ΕΛΕΓΧΟΣ ΔΙΑΛΕΞΗ 4 ΔΙΑΦΑΝΕΙΑ 1

Srednicki Chapter 55

Econ 2110: Fall 2008 Suggested Solutions to Problem Set 8 questions or comments to Dan Fetter 1

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ψηφιακή Οικονομία. Διάλεξη 10η: Basics of Game Theory part 2 Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Βάσεις ιαδικτύου. Θέματα. Εισαγωγή στην XML. Ευρετήρια για την Ανάκτηση Κειμένων. Ο αλγόριθμος HITS. είναι η XML. Παράδειγμα XML

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

SOLUTIONS TO MATH38181 EXTREME VALUES AND FINANCIAL RISK EXAM

department listing department name αχχουντσ ϕανε βαλικτ δδσϕηασδδη σδηφγ ασκϕηλκ τεχηνιχαλ αλαν ϕουν διξ τεχηνιχαλ ϕοην µαριανι

ένδρα (tail, head) Γονέας Παιδί (ancestor, descendant) Φύλλο Εσωτερικός Κόµβος (leaf, non-leaf) που αποτελεί το γονέα του v.

Το εσωτερικό ενός Σ Β

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Χρειάζεται να φέρω μαζί μου τα πρωτότυπα έγγραφα ή τα αντίγραφα; Asking if you need to provide the original documents or copies Ποια είναι τα κριτήρια

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

υαδικά δέντρα αναζήτησης

Chapter 3: Ordinal Numbers

AVL-trees C++ implementation

ένδρα u o Κόµβοι (nodes) o Ακµές (edges) o Ουρά και κεφαλή ακµής (tail, head) o Γονέας Παιδί Αδελφικός κόµβος (parent, child, sibling) o Μονοπάτι (pat

Εισαγωγή(στη(γλώσσα(XML(

Math221: HW# 1 solutions

ΗΥ460 Συστήµατα Διαχείρισης Βάσεων Δεδοµένων Χειµερινό Εξάµηνο 2016 Διδάσκοντες: Βασίλης Χριστοφίδης

Homework 8 Model Solution Section

Δομές Δεδομένων (Data Structures)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Fourier Series. MATH 211, Calculus II. J. Robert Buchanan. Spring Department of Mathematics

Transcript:

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών ΗΥ-561 ιαχείριση εδοµένων στο Παγκόσµιο Ιστό Ειρήνη Φουντουλάκη Βασίλης Χριστοφίδης Ονοµατεπώνυµο: Αριθµός Μητρώου: Τελική Εξέταση (3 ώρες) Ηµεροµηνία: Πέµπτη 12 Ιουνίου 2009 Άσκηση 1 (20 µονάδες) Το Τµήµα Επιστήµης Υπολογιστών (ΤΕΥ) έχει δύο βάσεις δεδοµένων που περιέχουν πληροφορία σχετική µε φοιτητές και µαθήµατα. Η πρώτη περιέχει πληροφορία σχετική µε προπτυχιακούς φοιτητές και τα µαθήµατα που έχουν πάρει. Το root element είναι το ugrads, µε ένα ή περισσότερα subelements τύπου φοιτητής student και εγγραφή enrollment. Κάθε φοιτητής έχει ένα αναγνωριστικό (κλειδί) studentid και ένα όνοµα name. Κάθε εγγραφή έχει ένα αναγνωριστικό µαθήµατος courseid, ένα αναγνωριστικό φοιτητή studentid και προαιρετικά το βαθµό grade που πήρε ο φοιτητής στο µάθηµα. Η δεύτερη βάση δεδοµένων κρατάει πληροφορία σχετική µε µεταπτυχιακά µαθήµατα και φοιτητές εγγραµένους σ' αυτά. Το root element είναι το gradcourses, µε ένα ή περισσότερα course subelements. Κάθε µάθηµα course έχει ένα αναγνωριστικό (κλειδί) courseid, ένα τίτλο title και µηδέν ή περισσότερα elements φοιτητής student. Κάθε φοιτητής έχει ένα αναγνωριστικό studentid µέσα στο element course, ένα όνοµα name και ένα βαθµό grade για το µάθηµα. Το ΤΕΥ σας προσέλαβε για να ενοποιήσετε τις δύο βάσεις δεδοµένων σε µια ιδεατή βάση δεδοµένων για φοιτητές. Σας είπαν ότι το root element πρέπει να είναι το students µε ένα ή περισσότερα student subelements. Κάθε φοιτητής πρέπει να έχει ένα µοναδικό αναγνωριστικό studentid, ένα όνοµα name, ένα τύπο type, ο οποίος πρέπει να είναι είτε GRAD για µεταπτυχιακούς φοιτητές, είτε UGRAD για προπτυχιακούς φοιτητές, και µηδέν ή παραπάνω course elements. Κάθε µάθηµα πρέπει να έχει ένα αναγνωριστικό (courseid), µοναδικό στα πλαίσια του student element, προαιρετικά ένα τίτλο (title), ένα τύπο (type), ο οποίος πρέπει να είναι είτε GRAD για µεταπτυχιακά µαθήµατα, είτε UGRAD για προπτυχιακά µαθήµατα, και ένα βαθµό (grade) που ο φοιτητής πήρε στο µάθηµα. Ορίστε τα XML Schemas για κάθε µια από τις τρεις βάσεις δεδοµένων συµπεριλαµβάνοντας τα απαραίτητα κλειδιά και αναφορές κλειδιών (key references). Για τη βάση δεδοµένων προπτυχιακών, τοποθετείστε το schema σας στο ugrads.xsd. Για τη βάση δεδοµένων µεταπτυχιακών, τοποθετείστε το schema σας στο gradcourses.xsd. Τοποθετείστε το ενοποιηµένο schema στο students.xsd.

ugrads.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name="ugrads" type="utype"> <!-- student primary key --> <xsd:key name="spkey"> <xsd:selector xpath="student"/> <xsd:field xpath="studentid"/> </xsd:key> <!-- enrollment foreign key --> <xsd:keyref name="sfkey" refer="spkey"> <xsd:selector xpath="enrollment"/> <xsd:field xpath="studentid"/> </xsd:keyref> </xsd:element> <!-- ugrads type --> <xsd:complextype name="utype"> <xsd:element name="student" type="stype" maxoccurs="unbounded"/> <xsd:element name="enrollment" type="etype" maxoccurs="unbounded"/> <!-- student type --> <xsd:complextype name="stype"> <xsd:element name="studentid" type="xsd:string"/> <xsd:element name="name" type="xsd:string"/> <!-- enrollment type --> <xsd:complextype name="etype"> <xsd:element name="courseid" type="xsd:string"/> <xsd:element name="studentid" type="xsd:string"/> <xsd:element name="grade" type="xsd:string" minoccurs="0"/> </xsd:schema> gradcourses.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name="gradcourses" type="gtype"> <!-- course primary key --> <xsd:key name="cpkey"> <xsd:selector xpath="course"/> <xsd:field xpath="courseid"/> </xsd:key> </xsd:element> <xsd:complextype name="gtype"> <xsd:element name="course" type="ctype" maxoccurs="unbounded"> <!-- student primary key --> <xsd:key name="spkey"> <xsd:selector xpath="student"/> <xsd:field xpath="studentid"/> </xsd:key> </xsd:element> <xsd:complextype name="ctype"> <xsd:element name="courseid" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="student" type="stype" minoccurs="0" maxoccurs="unbounded"/>

<xsd:complextype name="stype"> <xsd:element name="studentid" type="xsd:string"/> <xsd:element name="name" type="xsd:string"/> <xsd:element name="grade" type="xsd:string"/> </xsd:schema> students.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name="students"> <xsd:complextype name="stype"> <xsd:element name="student" type="stype" maxoccurs="unbounded"> <!-- course primary key --> <xsd:key name="cpkey"> <xsd:selector xpath="course" /> <xsd:field xpath="courseid" /> </xsd:key> </xsd:element> <!-- student primary key --> <xsd:key name="spkey"> <xsd:selector xpath="student"/> <xsd:field xpath="studentid"/> </xsd:key> </xsd:element> <xsd:complextype name="stype"> <xsd:element name="studentid" type="xsd:string"/> <xsd:element name="name" type="xsd:string"/> <xsd:element name="type" type="mytypes"/> <xsd:element name="course" type="ctype" minoccurs="0" maxoccurs="unbounded"/> <xsd:complextype name="ctype"> <xsd:element name="courseid" type="xsd:string"/> <xsd:element name="title" type="xsd:string" minoccurs="0"/> <xsd:element name="type" type="mytypes" minoccurs="0"/> <xsd:element name="grade" type="xsd:string" minoccurs="0"/> <xsd:simpletype name="mytypes"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="grad"/> <xsd:enumeration value="ugrad"/> </xsd:restriction> </xsd:simpletype> </xsd:schema> Άσκηση 2 (15 µονάδες) Μας ενδιαφέρουν έγγραφα MathML που περιγράφουν µαθηµατικούς τύπους στην µορφή του προθέµατος (δηλ. ο τελεστής (operator) εµφανίζεται πριν από τους τελεστέους (operands)). Για παράδειγµα, η αναπαράσταση προθέµατος του τύπου x^2+4x+4 είναι (+ (^ x 2) (* 4 x) 4) η οποία σειριακοποιείται στο παρακάτω έγγραφο MathML: <?xml version="1.0" encoding="utf-8"?> <apply> <plus/> <apply>

<power/> <ci>x</ci> <cn>2</cn> </apply> <apply> <times/> <cn>4</cn> <ci>x</ci> </apply> <cn>4</cn> </apply> Σε αυτή την άσκηση θεωρούµε ότι οι µόνοι γνωστοί τελεστές είναι η πρόσθεση (<plus/>) και ο πολλαπλασιασµός (<times/>) και ότι οι τελεστές είναι δυαδικοί (δηλ. έχουν 2 µόνο τελεστέους). α) (5 µονάδες) Γράψτε µια επερώτηση XQuery που µετασχηµατίζει ένα λογικό στοιχείο apply χωρίς αναδροµή σε µορφή ενθέµατος ((δηλ. ο τελεστής (operator) εµφανίζεται ενδιάµεσα απο τους δύο τελεστέους (operands)). Για παράδειγµα, εάν η επερώτηση εκτελεστεί µε είσοδο το παρακάτω έγγραφο: <apply> <times/> <ci>x</ci> <cn>2</cn> </apply> θα πάρουµε σαν αποτέλεσµα την συµβολοσειρά x * 2. for $op in doc("mathml/mathml_basic.xml")/*/*[self::plus or self::times] return <result> {$op/following-sibling::*[1]/text()} {if (name($op) = "plus") then "+" else "*"} {$op/following-sibling::*[2]/text()} </result> β) (10 µονάδες) Υποθέστε ότι ονοµατίζουµε την προηγούµενη επερώτηση σαν µία συνάρτηση eval($op, $x, $y), όπου $op είναι ο τελεστής και $x, $y οι δυο τελεστέοι. Η εκφραστικότητα της XQuery µας επιτρέπει να εφαρµόζουµε οποιαδήποτε συνάρτηση αναδροµικά. Ορίστε τη συνάρτηση eval($op, $x, $y) και γράψτε µια επερώτηση XQuery που τη χρησιµοποιεί για να επιστρέψει µια έκφραση MathML µε αναδροµικά στοιχεία apply στην αναπαράσταση ενθέµατος. Για παράδειγµα, εάν η επερώτηση εκτελεστεί µε είσοδο το παρακάτω έγγραφο: <apply> <times/> <apply> <plus/> <ci>x</ci> <cn>2</cn> </apply>

<ci>y</ci> </apply> θα πάρουµε σαν αποτέλεσµα την συµβολοσειρά (x + 2) * y. declare function local:eval($op, $x, $y) { let $dummyvariable := "aa" return concat( (, if (name($x) = "apply") then local:eval($x/*[1], $x/*[2], $x/*[3]) else $x/text(), if (name($op) = "plus") then "+" else "*", if (name($y) = "apply") then local:eval($y/*[1], $y/*[2], $y/*[3]) else $y/text(), ) ) }; let $mydoc := doc("mathml/mathml.xml") return <resultcontainer>{local:eval($mydoc/apply/*[1], $mydoc/apply/*[2], $mydoc/apply/*[3])} </resultcontainer> Άσκηση 3 (35 µονάδες) Για τις επερωτήσεις αυτής της άσκησης θεωρήστε τον παρακάτω Καθορισµό Τύπου Εγγράφων (DTD) µε πληροφορία σχετική µε φοιτητές και µαθήµατα: <!DOCTYPE Classes [ <!ELEMENT Classes (Class*)> <!ELEMENT Class (Topic, Students)> <!ATTLIST Class Number ID #REQUIRED Units CDATA#REQUIRED> <!ELEMENT Topic (#PCDATA)> <!ELEMENT Students (Student+)> <!ELEMENT Student (FirstNm, LastNm)> <!ELEMENT FirstNm (#PCDATA)> <!ELEMENT LastNm (#PCDATA)> ]> Για κάθε ένα από τα ζεύγη επερωτήσεων (α) (στ), αποφασίστε εάν οι εκφράσεις XPath και XQuery που δίνονται είναι ισοδύναµες (δηλ. µπορούµε να εγγυηθούµε ότι επιστρέφουν το ίδιο αποτέλεσµα για οποιοδήποτε έγγραφο XML σύµφωνο µε τον παραπάνω ΚΤΕ). Στην καταφατική περίπτωση γράψτε ΝΑΙ. Στην αρνητική, γράψτε ΟΧΙ και εξηγήστε την απάντησή σας µέσω ενός παραδείγµατος σύµφωνο µε τον παραπάνω ΚΤΕ για το οποίο τα αποτελέσµατα των εκφράσεων XPath και XQuery είναι διαφορετικά. Σηµειώστε ότι για την περίπτωση της ισοδυναµίας µπορείτε να αγνοήσετε την δόµηση του αποτελέσµατος (όπως λογικά στοιχεία <result>), και εστιάστε την προσοχή σας µόνο στο αν τα αποτελέσµατα των εκφράσεων περιέχουν τα ίδια λογικά στοιχεία. Επίσης µπορείτε να αγνοήστε δηλώσεις doc( ) καθώς και µετατροπές (coercions) τύπων. α) (5 µονάδες) Είναι οι παρακάτω εκφράσεις ισοδύναµες; XPath: //*[@Number="1234"]//Student

XQuery: for $c in /Classes/Class where $c/@number="1234" return $c/students/student Yes. β) (6 µονάδες) Είναι οι παρακάτω εκφράσεις ισοδύναµες; XPath: /Classes/Class[Students/Student[LastNm="Smith"]]/Topic XQuery: for $c in /Classes/Class where every $n in $c/students/student/lastnm satisfies $n="smith" return $c/topic No. For the XML document below, the XPath returns the only Topic element, while the XQuery returns the empty result. <Classes> <Class Number=``123 Units=``3 > <Topic>Data Integration</Topic> <Students> <Student> <FirstNm>John</FirstNm> <LastNm>Smith</LastNm> </Student> <Student> <FirstNm>Mary</FirstNm> <LastNm>Johnson</LastNm> </Student> </Students> </Class> </Classes> γ) (6 µονάδες) Είναι οι παρακάτω εκφράσεις ισοδύναµες; XPath: /Classes/Class [Students/Student/FirstNm!= Students/Student/FirstNm and Students/Student/LastNm!= Students/Student/LastNm]/Topic XQuery: for $c in /Classes/Class for $s1 in $c/students/student for $s2 in $c/students/student where $s1/firstnm!= $s2/firstnm and $s1/lastnm!= $s2/lastnm return $c/topic No. For the XML document given in the previous question, the XPath returns the Topic element once, while the XQuery returns the Topic element twice. δ) (6 µονάδες) Είναι οι παρακάτω εκφράσεις ισοδύναµες; XPath: /Classes/Class[@Units="5"][3]/Topic

XQuery: for $c in /Classes/Class[3][@Units="5"] return $c/topic No. For the XML document below, the XPath returns the Topic of the last Class element (Algorithms), while the XQuery returns the empty result. <Classes> <Class Number=``12 Units=``5 > <Topic>Data Integration</Topic> <Students> <Student> <FirstNm>John</FirstNm> <LastNm>Smith</LastNm> </Student> </Students> </Class> <Class Number=``34 Units=``5 > <Topic>Database Systems</Topic> <Students> <Student> <FirstNm>John</FirstNm> <LastNm>Smith</LastNm> </Student> </Students> </Class> <Class Number=``56 Units=``1 > <Topic>Data Structures</Topic> <Students> <Student> <FirstNm>John</FirstNm> <LastNm>Smith</LastNm> </Student> </Students> </Class> <Class Number=``78 Units=``5 > <Topic>Algorithms</Topic> <Students> <Student> <FirstNm>John</FirstNm> <LastNm>Smith</LastNm> </Student> </Students> </Class> </Classes> ε) (6 µονάδες) Είναι οι παρακάτω εκφράσεις ισοδύναµες; XPath: /Classes//Student[1] XQuery: let $s := /Classes/descendant::Student[1] return $s Yes.

στ) (6 µονάδες) Ποια είναι η διαφορά στην σηµασία των παρακάτω δύο εκφράσεων: - XPath: /Classes/Class [Students/Student/LastNm!= Students/Student/LastNm]/Topic - XQuery: for $c in /Classes/Class for $s1 in $c/students/student for $s2 in $c/students/student where $s1/lastnm!= $s2/lastnm return $c/topic The XPath query returns the topic of the classes in which there are two students with a different name. The XQuery query does this also, but returns the topics for every pair of such students with different names. The result of latter query hence potentially contains many duplicate topics. Άσκηση 4 (15 µονάδες) Εξηγήστε ποιο είναι το αναµενόµενο αποτέλεσµα των παρακάτω εκφράσεων XPath: α) (5 µονάδες) descendant::material/child::*[child::publ] All children of material-elements in the document that do have a publelement as a child. β)(5 µονάδες) /descendant-or-self::*/child::*[position()=2] All second elements in the list of children of any element in the document. Notice that for the position, the text elements and the attribute elements are not considered. Explanation: /descendant-or-self::*/ selects all elements in the document. These will be the context-nodes for the following axis child::*[position()=2] selects, for every node from the previous step, all children of the context node, and in this list, the second one is selected. γ) (5 µονάδες) /descendant-or-self::*[position()=last()-1] The one-but-last element of the document. Again attribute and textnodes are not considered. Explanation: / selects the root descendant-or-self is the axis that is followed; i.e., all nodes descendant of the root, including the root itself. ::* the node test: selects all element nodes

[position()=last()-1] the predicate selects from this list the one-but-last element. Predicates are always evaluated against the list of nodes generated by the axis and node test w.r.t. the context node. Άσκηση 5 (30 µονάδες) Ο Prüfer πρότεινε (1918) µια µέθοδο που δηµιουργεί µια 1-προς-1 αντιστοίχηση ανάµεσα σε ένα δέντρο µε ετικέτες και µια ακολουθία µε το να σβήνει κόµβους από το δέντρο, έναν τη φορά. Ο αλγόριθµος κατασκευής µιας ακολουθίας από ένα δέντρο T n µε n κόµβους µε ετικέτες από 1 έως n δουλεύει ως εξής. Από το T n, σβήνουµε ένα φύλλο µε τη µικρότερη ετικέτα για να δηµιουργήσουµε ένα µικρότερο δέντρο T n-1. Έστω a 1 µια ετικέτα ενός κόµβου που ήταν ο πατέρας του σβησµένου κόµβου. Επαναλαµβάνουµε αυτή τη διαδικασία στο T n-1 ώστε να καθορίσουµε το a 2 (τον πατέρα του επόµενου κόµβου που πρέπει να σβηστεί), και συνεχίζουµε µέχρι να µείνουν µόνο δύο κόµβοι ενωµένοι µε µια ακµή. Η ακολουθία (a 1, a 2,.., a n-2 ) ονοµάζεται Prüfer ακολουθία του δέντρου T n. Από την ακολουθία (a 1, a 2,.., a n-2 ) το αυθεντικό δέντρο T n µπορεί να ανακατασκευαστεί. Παρακάτω θα χρησιµοποιήσουµε µια ελαφρά παραλλαγή των Prüfer sequences, στην οποία συνεχίζουµε µέχρι το a n-1 δηλαδή µέχρι να µείνει ένας κόµβος µόνος του. Σε αυτή την άσκηση ενδιαφερόµαστε για την χρήση ακολουθιών Prüfer σαν µια εναλλακτική µέθοδο κωδικοποίησης δένδρων XML. Πιο συγκεκριµένα, ένα δέντρο XML µπορεί να αναπαρασταθεί από µια ακολουθία Prüfer που έχει κατασκευαστεί σύµφωνα µε την προηγούµενη µέθοδο χρησιµοποιώντας την µετα-διάταξη (post order) τών κόµβων του δένδρου. Αυτή η ακολουθία ονοµάζεται NPS (Numbered Prüfer sequence). Παράλληλα θα θεωρήσουµε µια καινούργια ακολουθία µε όνοµα LPS (Labeled Prüfer sequence) που κατασκευάζουµε παρόµοια µε τη διαφορά ότι κρατάµε την ετικέτα του σβησµένου κόµβου αντί να κρατάµε τον Prüfer αριθµό του πατέρα του. Εάν τώρα κάθε αριθµός σε µια NPS αντικατασταθεί µε την αντίστοιχη ετικέτα του κόµβου κατασκευάζουµε µια καινούργια ακολουθία µε όνοµα LPS (Labeled Prüfer sequence). Το σύνολο των NPS είναι αποθηκευµένο στη βάση δεδοµένων µαζί µε τα µοναδικά αναγνωριστικά των εγγράφων τους. (α) (5 µονάδες) Για το δένδρο XML T του παραδείγµατος δώστε τις ακολουθίες NPS T (µε την πληροφορία της δοµής) και LPS T (µε την πληροφορία των ετικετών). 5 A 2 C 4 NPS T : 2 5 4 5 0 LPS T : D C A T D 1 3 (β) (5 µονάδες) Ένα από τα βασικά πλεονεκτήµατα της παραπάνω κωδικοποίησης είναι ότι επιτρέπει την οµοιόµορφη αναπαράσταση µε Prüfer

ακολουθίες τόσο των δεδοµένων T όσο και των επερωτήσεων Q: το ταίριασµά τους ανάγεται σε ένα πρόβληµα ταιριάσµατος υπο-ακολουθιών (εαν η Q (χωρίς wildcards // kai * ) είναι υπο-δένδρο του T τότε η LS Q είναι υποακολουθία της LS T ) αποφεύγοντας δοµικές συζεύξεις. Παρακάτω θεωρούµε ότι µια υπο-ακολουθία είναι οποιαδήποτε συµβολοσειρά µπορούµε να κατασκευάσουµε διαγράφοντας µηδέν η περισσότερους χαρακτήρες από µια δοσµένη συµβολοσειρά. Για την επερώτηση XML του παραδείγµατος δώστε τις ακολουθίες NPS Q (µε την πληροφορία της δοµής) και LPS Q (µε την πληροφορία των ετικετών). Είναι η LPS Q υπο-ακολουθία της LPS T ; Q 3 A D 1 2 NPS Q : 3 3 0 LPS Q : D A LPS Q matches a subsequence S of LPS T at positions (1, 3, 5). The postorder number sequence of subsequence S (2, 4, 0). Note that there may be more than one subsequence in LPS T that matches LPS Q. (γ) (5 µονάδες) Η ύπαρξη ωστόσο µιας υπο-ακολουθίας του δένδρου Τ που ταιριάζει µε την ερώτηση Q αποτελεί µόνο ικανή συνθήκη για να είναι η Q υπο-δέντρο του Τ. υστυχώς, δεν αντιστοιχούν πάντα οι ετικέτες µιας υποακολουθίας S σε κόµβους που είναι συνδεδεµένοι στο δέντρο Τ. Σε µια πρώτη φάση θεωρούµε την ακόλουθη συνθήκη ορθότητας: εάν µια ακολουθία ετικετών LPS Q είναι υπο-ακολουθία της LPS T τότε η LPS Q είναι η µακρύτερη κοινή υπο-ακολουθία (Longest Common Subsequence) των LPS Q και LPS T δηλ. εάν LCS(Q,T) Q τότε η Q δεν είναι υποδέντρο του T. Υπάρχουν πολλοί αλγόριθµοι για να βρίσκουµε την µακρύτερη κοινή υπο-ακολουθία. Σε αυτή την άσκηση θεωρούµε ότι το µήκος της LCS δύο συµβολοσειρών LPS Q [1..m] και LPS T [1..n] που δίνονται στην είσοδο µπορεί να υπολογιστεί βρίσκοντας τα µήκη LCS όλων των δυνατών συνδυασµών προθέµατος (prefix) των LPS Q και LPS T. Τα µήκη LCS αποθηκεύονται σε έναν δυδιάστατο πίνακα R κάθε στοιχείο του οποίου R[i,j] δίνει το µήκος της LCS ενός ζεύγους προθεµάτων LPS Q [1..i] και LPS T [1..j]. R[i,j] = 0, if i = 0 or j = 0 R[i-1, j-1] + 1, if LPSQ[i]=LPST[j] max ( R[i-1, j],r[i, j-1] ), if LPSQ[i]<>LPST[j] Σηµειώστε ότι το κάτω δεξιά κελί R[m,n] δίνει το συνολικό µήκος της LCS: εάν είναι διαφορετικό από το µήκος της Q τότε η Q δεν είναι υποδέντρο του T. Υπολογίστε τον πίνακα R[i,j] για την επερώτηση Q του β) και το δένδρο Τ του α). Είναι τελικά η Q υποδένδρο του Τ;

T 5 A 2 1 Q D 3 A 4 3 C LPS T : D C LPS Q : D R D LPSQ A LPST D C A 1 1 1 1 1 1 2 2 2 2 1 2 2 2 3 D 1 2 LCS(Q,T) (δ) (5 µονάδες) Για να απαντήσουµε µια επερώτηση Q θα πρέπει να µπορούµε να βρίσκουµε όλα τα δυνατά ταιριάσµατά της στο δένδρο Τ δηλ. να απαριθµούµε όλες τις υπο-ακολουθίες της LPS T που ταιριάζουν µε την LPS Q. Κάθε µία από τις υπο-ακολουθίες ταιριάσµατος σηµειώνεται µε την λίστα των των θέσεων (positions) στις οποίες βρίσκουµε κόµβους που ταιριάζουν (i 1, i 2,, i m ), LPS Q [j] = LPS T [i j ]. ώστε όλα τα δυνατά ταιριάσµατα της επερώτησης Q του β) µε το δένδρο Τ του α) διασχίζοντας αναδροµικά τον πίνακα R[i,j] από το κάτω-αριστερά προς το πάνω-δεξιά κελί. LS D C A D 1 1 1 1 1 LS 1 2 2 2 2 A 1 2 2 2 3 Subsequence Matches i i i 1 3 5 1 2 5 D C D C Since R is processed from the bottom-right corner to the top-left corner, subsequence match is established from right to left. Furthermore, each subsequence match is generated exactly once in the process. (ε) (10 µονάδες) Σκιαγραφήστε έναν έλεγχο που απαλείφει λανθασµένες υπο-ακολουθίες ταιριάσµατος που επιστρέφονται από την προηγούµενη µέθοδο λαµβάνοντας υπόψη όχι µόνο τις ετικέτες των κόµβων (LPS) αλλά και την δοµική πληροφορία τους (NPS). To eliminate false alarm and false dismissal, they resort to postprocessing (for false alarm) and multiple isomorphism queries processing (for false dismissal), both of which are time consuming. At k=m, map the root node to ik without any checks At k=m-1 k=1 (i.e., right to left) check if kth parent in Q = nearest mapped ancestor of ik in T Example Subsequence match: (i1,i2,i3)=(1,2,5) is a False positive

Q 3 1 2 k=3: map the root directly to i3 k=2: check if map[ 2 s parent ] is an ancestor of i2=3 in T k=1: check if map[ 1 s parent ] is an ancestor of i2=1 in T 2 1 D 5 4 3 C T 1 2 3 2 map 5